Voir First Post
9/24 ajouté
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.
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
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. .. ..
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.
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.
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