Eine Aufzeichnung zur Lösung der Probleme in der ersten Hälfte von Kapitel 2. Das Ausführungsergebnis des UNIX-Befehls wird ebenfalls angezeigt.
Die Zieldatei ist hightemp.txt, wie auf der Webseite gezeigt.
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.
Zählen Sie die Anzahl der Zeilen. Verwenden Sie zur Bestätigung den Befehl wc.
# -*- coding: utf-8 -*-
__author__ = 'todoroki'
f = open('hightemp.txt')
lines = f.readlines()
print len(lines)
f.close()
#=> 24
Lesen Sie die Zieldatei Zeile für Zeile und zählen Sie die Anzahl der Zeilen.
cat hightemp.txt | grep -c ""
#=> 24
Zeigen Sie den Text mit cat
an und leiten Sie ihn an grep
weiter, um die Anzahl der Zeilen zu zählen.
Übrigens können Sie die Anzahl der Zeilen auf die gleiche Weise mit wc -l
anstelle von grep -c ""
nach der Pipe zählen, aber mit wc
gibt es ein Leerzeichen in der Ausgabe. Ich werde beitreten.
Es ist oft besser, grep -c ""
zu verwenden, da es ärgerlich sein kann, wenn in der Pipe Leerzeichen vorhanden sind, um die Ausgabe der Anzahl der Zeilen an eine andere Verarbeitung weiterzuleiten.
Ersetzen Sie jede Registerkarte durch ein Leerzeichen. Verwenden Sie zur Bestätigung den Befehl sed, den Befehl tr oder den Befehl expand.
# -*- coding: utf-8 -*-
__author__ = 'todoroki'
import re
inputfile = 'hightemp.txt'
outputfile = 'hightemp_tab2space.txt'
f = open(inputfile)
lines = f.readlines()
g = open(outputfile, 'w')
for line in lines:
line = re.sub('\t', ' ', line)
g.write(line)
print line
f.close()
g.close()
#=>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
#=>Yamagata 40 Yamagata.8 1933-07-25
#=>Präfektur Yamanashi Kofu 40.7 2013-08-10
#=>Präfektur Wakayama Katsuragi 40.6 1994-08-08
#=>Präfektur Shizuoka Tenryu 40.6 1994-08-04
#=>40 Katsunuma, Präfektur Yamanashi.5 2013-08-10
#=>40 Koshiya, Präfektur Saitama.4 2007-08-16
#=>Präfektur Gunma Tatebayashi 40.3 2007-08-16
#=>Präfektur Gunma Kamisatomi 40.3 1998-07-04
#=>Ainishi 40, Präfektur Aichi.3 1994-08-05
#=>Präfektur Chiba Ushihisa 40.2 2004-07-20
#=>Präfektur Shizuoka Sakuma 40.2 2001-07-24
#=>40 Uwajima, Präfektur Ehime.2 1927-07-22
#=>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
#=>39 Shigehara, Chiba.9 2013-08-11
#=>39 Hatoyama, Präfektur Saitama.9 1997-07-05
#=>Toyonaka 39, Osaka.9 1994-08-08
#=>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
Ersetzen Sie das Tabulatorzeichen \ t
durch ein Leerzeichen.
cat hightemp.txt | tr "\t" " " > hightemp_tr.txt
#=> (Die Ausgabe ist die gleiche wie oben)
Speichern Sie die extrahierte Spalte jeder Zeile als col1.txt und die extrahierte Spalte 2 als col2.txt. Verwenden Sie zur Bestätigung den Befehl cut.
# -*- coding: utf-8 -*-
__author__ = 'todoroki'
inputfile = 'hightemp.txt'
outputfile1 = 'col1.txt'
outputfile2 = 'col2.txt'
f = open(inputfile)
lines = f.readlines()
g = open(outputfile1, "w")
h = open(outputfile2, "w")
for line in lines:
line = line.split('\t')
g.write(line[0].strip('\n') + '\n')
h.write(line[1].strip('\n') + '\n')
f.close()
g.close()
h.close()
# (col1.txt)
#=>Präfektur Kochi
#=>Saitama
#=>Präfektur Gifu
#=>Präfektur Yamagata
#=>Präfektur Yamanashi
#=>Präfektur Wakayama
#=>Präfektur Shizuoka
#=>Präfektur Yamanashi
#=>Saitama
#=>Präfektur Gunma
#=>Präfektur Gunma
#=>Präfektur Aichi
#=>Präfektur Chiba
#=>Präfektur Shizuoka
#=>Präfektur Ehime
#=>Präfektur Yamagata
#=>Präfektur Gifu
#=>Präfektur Gunma
#=>Präfektur Chiba
#=>Saitama
#=>Präfektur Osaka
#=>Präfektur Yamanashi
#=>Präfektur Yamagata
#=>Präfektur Aichi
# (col2.txt)
#=>Egawazaki
#=>Kumagai
#=>Tajimi
#=>Yamagata
#=>Kofu
#=>Katsuragi
#=>Tenryu
#=>Katsunuma
#=>Koshiya
#=>Tatebayashi
#=>Kamisatomi
#=>Ainishi
#=>Ushihisa
#=>Sakuma
#=>Uwajima
#=>Sakata
#=>Mino
#=>Maebashi
#=>Mobara
#=>Hatoyama
#=>Toyonaka
#=>Otsuki
#=>Tsuruoka
#=>Nagoya
Aufteilen nach Tabulatortrennzeichen und Ausgeben jedes Ziels in eine Datei
cut -f 1 hightemp.txt > hightemp_cut1.txt
cut -f 2 hightemp.txt > hightemp_cut2.txt
#=> (Wie oben, daher wird die Ausgabe weggelassen)
Kombinieren Sie die in 12 erstellten Spalten col1.txt und col2.txt, um eine Textdatei zu erstellen, in der die erste und die zweite Spalte der Originaldatei tabulatorgetrennt angeordnet sind. Verwenden Sie zur Bestätigung den Befehl Einfügen.
# -*- coding: utf-8 -*-
__author__ = 'todoroki'
inputfile1 = 'col1.txt'
inputfile2 = 'col2.txt'
outputfile = 'col_merge.txt'
f = open(inputfile1)
g = open(inputfile2)
h = open(outputfile, "w")
lines1 = f.readlines()
lines2 = g.readlines()
for a, b in zip(lines1, lines2):
h.write(a.strip() + '\t' + b.strip() + '\n')
f.close()
g.close()
h.close()
#=>Präfektur Kochi Egawazaki
#=>Kumagai, Präfektur Saitama
#=>Tajimi, Präfektur Gifu
#=>Präfektur Yamagata Yamagata
#=>Präfektur Yamanashi Kofu
#=>Präfektur Wakayama Katsuragi
#=>Präfektur Shizuoka Tenryu
#=>Katsunuma, Präfektur Yamanashi
#=>Koshiya, Präfektur Saitama
#=>Präfektur Gunma Tatebayashi
#=>Präfektur Gunma Kamisatomi
#=>Präfektur Aichi Ainishi
#=>Ushihisa, Chiba
#=>Sakuma, Präfektur Shizuoka
#=>Uwajima, Präfektur Ehime
#=>Sakata, Präfektur Yamagata
#=>Mino, Präfektur Gifu
#=>Präfektur Gunma Maebashi
#=>Shigehara, Chiba
#=>Hatoyama, Präfektur Saitama
#=>Toyonaka, Osaka
#=>Präfektur Yamanashi Otsuki
#=>Tsuruoka, Präfektur Yamagata
#=>Präfektur Aichi Nagoya
Lesen Sie zwei Dateien und verarbeiten Sie Sequenzobjekte parallel zur Zip-Funktion.
paste col1.txt col2.txt > hightemp_paste.txt
#=> (Die Ausgabe ist die gleiche wie oben)
Empfangen Sie die natürliche Zahl N beispielsweise über ein Befehlszeilenargument und zeigen Sie nur die ersten N Zeilen der Eingabe an. Verwenden Sie zur Bestätigung den Befehl head.
# -*- coding: utf-8 -*-
__author__ = 'todoroki'
import sys
if len(sys.argv) == 3:
N = int(sys.argv[1])
f = open(sys.argv[2])
lines = f.readlines()
for i in xrange(N):
print lines[i].strip()
f.close()
else:
print "please input \'N\' and \'FILENAME\'"
# (python problem14.py 5 hightemp.txt)
#=>Präfektur Kochi Egawasaki 41 2013-08-12
#=>40 Kumagai, Präfektur Saitama.9 2007-08-16
#=>Präfektur Gifu Tajimi 40.9 2007-08-16
#=>Yamagata 40 Yamagata.8 1933-07-25
#=>Präfektur Yamanashi Kofu 40.7 2013-08-10
Geben Sie die Anzahl der gelesenen Zeilen so viele wie die Anzahl der empfangenen Zeilen aus.
head -n 5 hightemp.txt
#=> (Die Ausgabe ist die gleiche wie oben)
Recommended Posts