Siehe Erster Beitrag
9/24 hinzugefügt
hightemp.txt ist eine Datei, in der die Aufzeichnung der höchsten Temperatur in Japan im tabulatorgetrennten Format "Präfektur", "Punkt", "℃" und "Tag" gespeichert wird. Erstellen Sie ein Programm, das die folgende Verarbeitung ausführt, und führen Sie hightemp.txt als Eingabedatei aus. Führen Sie außerdem denselben Prozess mit einem UNIX-Befehl aus und überprüfen Sie das Ausführungsergebnis des Programms.
Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die letzten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl tail.
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)
#Bestätigen Sie mit dem Befehl 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äfektur Yamagata.9 1978-08-03
Präfektur Aichi Nagoya 39.9 1942-08-02
Otsuki, Yamanashi 39.9 1990-07-19
39 Tsuruoka, Präfektur Yamagata.9 1978-08-03
Präfektur Aichi Nagoya 39.9 1942-08-02
Impression: Der Punkt des Einfallsreichtums ist, wie die Linie angegeben wird, mit der der Join gestartet werden soll
Empfangen Sie die natürliche Zahl N mithilfe von Befehlszeilenargumenten und teilen Sie die Eingabedatei zeilenweise in N. Führen Sie den gleichen Vorgang mit dem Befehl split durch
split_016.py
-*- coding:utf-8 -*-
import codecs
import subprocess
import math
def split(data,N):
index=0
#Berechnen Sie die Anzahl der zu exportierenden Dateien
page=math.ceil(len(data)/N)
for i in range(0,page):
#Schreiben Sie die Daten, um die Liste als Zeichenfolge zu schreiben_Zu Daten hinzugefügt
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
Schreiben durch Split-Funktion_data15 und schreibe_Die Datei von data30 wurde ausgegeben
write_data15
Präfektur Kochi Egawasaki 41 2013-08-12
40 Kumagai, Präfektur Saitama.9 2007-08-16
40 Tajimi, Präfektur Gifu.9 2007-08-16
(Ausgelassen, weil das Ergebnis lang ist)
write_data30
40 Sakata, Präfektur Yamagata.1 1978-08-03
Mino 40, Präfektur Gifu 2007-08-16
Präfektur Gunma Maebashi 40 2001-07-24
(Ausgelassen, weil das Ergebnis lang ist)
Die Dateien xaa und xab wurden mit dem Befehl split ausgegeben
xaa
Präfektur Kochi Egawasaki 41 2013-08-12
40 Kumagai, Präfektur Saitama.9 2007-08-16
40 Tajimi, Präfektur Gifu.9 2007-08-16
(Ausgelassen, weil das Ergebnis lang ist)
xab
40 Sakata, Präfektur Yamagata.1 1978-08-03
Mino 40, Präfektur Gifu 2007-08-16
Präfektur Gunma Maebashi 40 2001-07-24
(Ausgelassen, weil das Ergebnis lang ist)
Process finished with exit code 0
Impressionen: Beim Erstellen der Teilungsfunktion habe ich mir Gedanken darüber gemacht, wie die Anzahl der Seiten berechnet und die Datei benannt werden kann, wenn eine Datei mit N wenigen Zeilen erstellt wird. .. ..
Suchen Sie den Typ der Zeichenfolge in der ersten Spalte (eine Reihe verschiedener Zeichenfolgen). Verwenden Sie zur Bestätigung die Befehle sort und uniq.
sort_uniq_017.py
# -*- coding:utf-8 -*-
import codecs
import subprocess
def sort_uniq(data):
cut_temp = []
sort_temp = []
uniq_temp = []
#cut -Wie f 1 funktioniert
for temp in data:
cut_temp.append(temp.split()[:1])
#Wie sortieren funktioniert
sort_temp = sorted(cut_temp)
#Wie uniq funktioniert
for temp in sort_temp:
if temp not in uniq_temp:
uniq_temp.append(temp)
#Löschen Sie nach dem Konvertieren der Liste in str zusätzliche Zeichen und zeigen Sie sie an
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äfektur Chiba
Präfektur Wakayama
Saitama
Präfektur Osaka
(Ausgelassen, weil das Ergebnis lang ist)
Präfektur Chiba
Präfektur Wakayama
Saitama
Präfektur Osaka
Präfektur Yamagata
(Ausgelassen, weil das Ergebnis lang ist)
Process finished with exit code 0
Impressionen: Ich wusste nicht, wie man eine Pipe mit dem Subprozessmodul schreibt. .. .. Unter Linux benötigen Sie nur |, aber wenn Sie es programmieren, können Sie sehen, welche Parameter Sie benötigen.
Sortieren Sie jede Zeile in absteigender Reihenfolge der Zahlen in der dritten Spalte. Ordnen Sie jede Zeile in umgekehrter Reihenfolge der Zahlen in der dritten Spalte an (Hinweis: Sortieren Sie den Inhalt jeder Zeile unverändert). Verwenden Sie den Befehl sort zur Bestätigung (dieses Problem muss nicht mit dem Ergebnis der Ausführung des Befehls übereinstimmen).
r_sort_018.py
#-*- conding:utf-8 -*-
import codecs
import subprocess
import operator
def r_sort(data):
cut_temp = []
sort_temp = []
#Aufführen
for temp in data:
cut_temp.append(temp.split())
#Wie sortieren funktioniert
sort_temp = sorted(cut_temp,key=operator.itemgetter(2),reverse=True)
#Löschen Sie nach dem Konvertieren der Liste in str zusätzliche Zeichen und zeigen Sie sie an
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äfektur Kochi', 'Egawazaki', '41', '2013-08-12
Saitama', 'Kumagai', '40.9', '2007-08-16
Präfektur Gifu', 'Tajimi', '40.9', '2007-08-16
(Ausgelassen, weil das Ergebnis lang ist)
Präfektur Kochi Egawasaki 41 2013-08-12
40 Tajimi, Präfektur Gifu.9 2007-08-16
40 Kumagai, Präfektur Saitama.9 2007-08-16
(Ausgelassen, weil das Ergebnis lang ist)
Process finished with exit code 0
Impressionen: Die Itemgetter-Funktion des Operator-Moduls war hilfreich.
Ermitteln Sie die Häufigkeit des Auftretens der ersten Spalte jeder Zeile und zeigen Sie sie in absteigender Reihenfolge an. Verwenden Sie zur Bestätigung die Befehle cut, uniq, sort
frequency_019.py
#-*- coding:utf-8 -*-
import codecs
import subprocess
import collections
import operator
def frequency(data):
cut_temp = []
sort_temp = []
count_dict={}
# cut -Wie f 1 funktioniert
for temp in data:
cut_temp.append(temp.split()[:1])
#Wie sortieren funktioniert
sort_temp = sorted(cut_temp)
#Zählen Sie die Anzahl der Elemente in der Liste
# uniq -c+Wie sortieren funktioniert
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äfektur Yamanashi
3 Präfektur Yamagata
3 Präfektur Gunma
3 Präfektur Saitama
2 Präfektur Gifu
2 Chiba
(Ausgelassen, weil das Ergebnis lang ist)
3 Präfektur Gunma
3 Präfektur Yamanashi
3 Präfektur Yamagata
3 Präfektur Saitama
2 Präfektur Shizuoka
2 Präfektur Aichi
(Ausgelassen, weil das Ergebnis lang ist)
Process finished with exit code 0
Impressionen: Es war schwierig, Wörterbücher zu handhaben und zu sortieren.
Recommended Posts