[Python] Défiez 100 coups! (015 ~ 019)

À propos de l'histoire jusqu'à présent

Voir First Post

État de Knock

9/24 ajouté

Chapitre 2: Principes de base des commandes UNIX

hightemp.txt est un fichier qui stocke l'enregistrement de la température la plus élevée au Japon dans le format délimité par des tabulations de «préfecture», «point», «℃» et «jour». Créez un programme qui effectue le traitement suivant et exécutez hightemp.txt en tant que fichier d'entrée. De plus, exécutez le même processus avec une commande UNIX et vérifiez le résultat de l'exécution du programme.

015. Sortie des N dernières lignes

Recevez le nombre naturel N au moyen d'un argument de ligne de commande, et affichez uniquement les N dernières lignes de l'entrée. Utilisez la commande tail pour confirmation.

tail_015.py


#-*- coding:utf-8 -*-

import codecs
import subprocess

def tail(data,N):
    max = len(data)
    print(''.join(data[max-N:]))

if __name__=="__main__":
    filename = 'hightemp.txt'
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    f = codecs.open(filename,'r','utf-8')
    N=3
    tail(f.readlines(),N)

#Confirmer avec la commande tail
    output=subprocess.check_output(["tail","-n",str(N),basepath+filename])
    print(output.decode('utf-8'))

result


Otsuki, Yamanashi 39.9	1990-07-19
39 Tsuruoka, Préfecture de Yamagata.9	1978-08-03
Préfecture d'Aichi Nagoya 39.9	1942-08-02

Otsuki, Yamanashi 39.9	1990-07-19
39 Tsuruoka, Préfecture de Yamagata.9	1978-08-03
Préfecture d'Aichi Nagoya 39.9	1942-08-02

Impression: le point d'ingéniosité est de savoir comment spécifier la ligne pour commencer la jointure

016. Divisez le fichier en N

Recevez le nombre naturel N par des moyens tels que des arguments de ligne de commande et divisez le fichier d'entrée en N ligne par ligne. Réalisez le même processus avec la commande Split

split_016.py


-*- coding:utf-8 -*-

import codecs
import subprocess
import math

def split(data,N):
    index=0
#Calculer le nombre de fichiers à exporter
    page=math.ceil(len(data)/N)
    for i in range(0,page):
#Ecrire les données pour écrire la liste sous forme de chaîne de caractères_Ajouté aux données
        write_data=''.join(data[index:N+index])
        index+=N
        f=codecs.open('write_data'+str(index),'w','utf-8')
        f.write(write_data)

if __name__ == "__main__":
    filename = 'hightemp.txt'
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    N = 15
    f=codecs.open(filename,'r','utf-8')
    split(f.readlines(),N)
    output=subprocess.check_output(["split","-l",str(N),basepath+filename])

result


écrire par fonction de fractionnement_data15 et écrire_Le fichier de data30 a été sorti
write_data15
Préfecture de Kochi Egawasaki 41 2013-08-12
40 Kumagai, Préfecture de Saitama.9	2007-08-16
40 Tajimi, Préfecture de Gifu.9	2007-08-16
(Omis car le résultat est long)
write_data30
40 Sakata, Préfecture de Yamagata.1	1978-08-03
Mino 40, préfecture de Gifu 2007-08-16
Préfecture de Gunma Maebashi 40 2001-07-24
(Omis car le résultat est long)

Les fichiers xaa et xab ont été générés par la commande split
xaa
Préfecture de Kochi Egawasaki 41 2013-08-12
40 Kumagai, Préfecture de Saitama.9	2007-08-16
40 Tajimi, Préfecture de Gifu.9	2007-08-16
(Omis car le résultat est long)
xab
40 Sakata, Préfecture de Yamagata.1	1978-08-03
Mino 40, préfecture de Gifu 2007-08-16
Préfecture de Gunma Maebashi 40 2001-07-24
(Omis car le résultat est long)

Process finished with exit code 0

Impressions: Lors de la création de la fonction de fractionnement, je me demandais comment calculer le nombre de pages et comment nommer le fichier lors de la création d'un fichier avec N quelques lignes. .. ..

017. Différence dans la chaîne de caractères de la première colonne

Recherchez le type de chaîne de caractères dans la première colonne (un ensemble de chaînes de caractères différentes). Utilisez les commandes sort et uniq pour confirmation.

sort_uniq_017.py


# -*- coding:utf-8 -*-

import codecs
import subprocess

def sort_uniq(data):
    cut_temp = []
    sort_temp = []
    uniq_temp = []

#cut -Comment fonctionne f 1
    for temp in data:
        cut_temp.append(temp.split()[:1])

#Comment fonctionne le tri
    sort_temp = sorted(cut_temp)

#Comment fonctionne uniq
    for temp in sort_temp:
        if temp not in uniq_temp:
            uniq_temp.append(temp)

#Après avoir converti la liste en str, supprimez les caractères supplémentaires et affichez
    sort_uniq_data = map(str,uniq_temp)
    for temp in sort_uniq_data:
        print(''.join(temp).lstrip("['").rstrip("']"))

if __name__ == "__main__":
    filename = 'hightemp.txt'
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    f = codecs.open(filename,'r','utf-8')
    sort_uniq(f.readlines())
    print('\n')

    cut=subprocess.Popen(["cut","-f","1",basepath+filename],stdout=subprocess.PIPE)
    sort = subprocess.Popen(["sort"],stdin=cut.stdout,stdout=subprocess.PIPE)
    uniq = subprocess.Popen(["uniq"],stdin=sort.stdout,stdout=subprocess.PIPE)
    end_of_pipe = uniq.stdout
    for line in end_of_pipe:
        print(line.decode('utf-8').rstrip('\n'))

result


Préfecture de Chiba
Préfecture de Wakayama
Saitama
Préfecture d'Osaka
(Omis car le résultat est long)


Préfecture de Chiba
Préfecture de Wakayama
Saitama
Préfecture d'Osaka
Préfecture de Yamagata
(Omis car le résultat est long)
Process finished with exit code 0

Impressions: je ne savais pas comment écrire un tube en utilisant le module de sous-processus. .. .. Avec Linux, vous n'avez besoin que de |, mais si vous le programmez, vous pouvez voir de quels paramètres vous avez besoin.

018. Trier

Trier chaque ligne dans l'ordre décroissant des nombres de la 3e colonne Disposez chaque ligne dans l'ordre inverse des nombres de la 3e colonne (Remarque: trier le contenu de chaque ligne sans changement). Utilisez la commande sort pour confirmation (ce problème ne doit pas nécessairement correspondre au résultat de l'exécution de la commande).

r_sort_018.py


#-*- conding:utf-8 -*-
import codecs
import subprocess
import operator

def r_sort(data):
    cut_temp = []
    sort_temp = []

#liste
    for temp in data:
        cut_temp.append(temp.split())

#Comment fonctionne le tri
    sort_temp = sorted(cut_temp,key=operator.itemgetter(2),reverse=True)

#Après avoir converti la liste en str, supprimez les caractères supplémentaires et affichez
    sort_data = map(str, sort_temp)
    for temp in sort_data:
        print(''.join(temp).lstrip("['").rstrip("']"))

if __name__=="__main__":
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    filename = 'hightemp.txt'
    with codecs.open(filename,'r','utf-8') as f:
        r_sort(f.readlines())
    print('\n')

    sort= subprocess.check_output(["sort","-r","-k","3",basepath+filename])
    print(sort.decode('utf-8'))

result


Préfecture de Kochi', 'Egawazaki', '41', '2013-08-12
Saitama', 'Kumagai', '40.9', '2007-08-16
Préfecture de Gifu', 'Tajimi', '40.9', '2007-08-16
(Omis car le résultat est long)

Préfecture de Kochi Egawasaki 41 2013-08-12
40 Tajimi, Préfecture de Gifu.9	2007-08-16
40 Kumagai, Préfecture de Saitama.9	2007-08-16
(Omis car le résultat est long)
Process finished with exit code 0

Impressions: La fonction itemgetter du module opérateur était utile.

019. Trouvez la fréquence d'apparition des chaînes de caractères dans la première colonne de chaque ligne et organisez-les par ordre décroissant de fréquence d'apparition.

Trouvez la fréquence d'apparition de la première colonne de chaque ligne et affichez-les par ordre décroissant. Utilisez les commandes cut, uniq, sort pour confirmation

frequency_019.py


#-*- coding:utf-8 -*-
import codecs
import subprocess
import collections
import operator

def frequency(data):
    cut_temp = []
    sort_temp = []
    count_dict={}

    # cut -Comment fonctionne f 1
    for temp in data:
        cut_temp.append(temp.split()[:1])

    #Comment fonctionne le tri
    sort_temp = sorted(cut_temp)

    #Comptez le nombre d'éléments dans la liste
    # uniq -c+Comment fonctionne le tri
    count_dict = collections.Counter(map(str,sort_temp))
    for value,count in sorted(count_dict.items(),key=operator.itemgetter(1),reverse=True):
        print(count,str(value).lstrip("['").rstrip("']"))

if __name__=="__main__":
    basepath = '/Users/masassy/PycharmProjects/Pywork/training/'
    filename = 'hightemp.txt'
    with codecs.open(filename,'r','utf-8') as f:
        frequency(f.readlines())

    print('\n')
    cut=subprocess.Popen(["cut","-f","1",basepath+filename],stdout=subprocess.PIPE)
    sort1 = subprocess.Popen(["sort"],stdin=cut.stdout,stdout=subprocess.PIPE)
    uniq = subprocess.Popen(["uniq","-c"],stdin=sort1.stdout,stdout=subprocess.PIPE)
    sort2 = subprocess.Popen(["sort","-r"],stdin=uniq.stdout,stdout=subprocess.PIPE)
    end_of_pipe = sort2.stdout
    for line in end_of_pipe:
        print(line.decode('utf-8').lstrip(' ').rstrip('\n'))

result


3 Préfecture de Yamanashi
3 Préfecture de Yamagata
3 Préfecture de Gunma
3 Préfecture de Saitama
2 Préfecture de Gifu
2 Chiba
(Omis car le résultat est long)

3 Préfecture de Gunma
3 Préfecture de Yamanashi
3 Préfecture de Yamagata
3 Préfecture de Saitama
2 Préfecture de Shizuoka
2 Préfecture d'Aichi
(Omis car le résultat est long)
Process finished with exit code 0

Impressions: il était difficile de gérer et de trier les dictionnaires.

Recommended Posts

[Python] Défiez 100 coups! (015 ~ 019)
[Python] Défiez 100 coups! (030-034)
[Python] Défiez 100 coups! (006-009)
[Python] Défiez 100 coups! (000-005)
[Python] Défiez 100 coups! (010-014)
[Python] Défiez 100 coups! (025-029)
[Python] Défiez 100 coups! (020-024)
journal des défis python ①
Défiez 100 coups de science des données
Python
Défi Spartacamp Python 2019 Day2
Pandas 100 coups pour les débutants en Python
Défiez Python3 et Selenium Webdriver
Défiez LOTO 6 avec Python sans discipline
Traitement d'image avec la binarisation Python 100 knocks # 3
# 2 Les débutants en Python défient AtCoder! ABC085C --Otoshidama
100 traitement d'image par Python Knock # 2 Échelle de gris
Les bases de Python ⑤
Résumé Python
Python intégré
Notation d'inclusion Python
Technique Python
Étudier Python
Compte à rebours Python 2.7
Mémorandum Python
Python FlowFishMaster
Service Python
astuces python
fonction python ①
Les bases de Python
Mémo Python
ufo-> python (3)
Notation d'inclusion Python
Installer python
Python Singleton
Les bases de Python ④
Mémorandum Python 2
mémo python
Python Jinja2
100 traitement d'image avec Python Knock # 8 Max Pooling
Incrément Python
atCoder 173 Python
[Python] fonction
Installation de Python
Installer Python 3.4.3.
Essayez Python
Mémo Python
Itératif Python
Algorithme Python
Python2 + mot2vec
[Python] Variables
Fonctions Python
Python sys.intern ()
Tutoriel Python
Fraction Python
underbar python C'est ce que
Résumé Python
Démarrer python
[Python] Trier