Es ist ein Herausforderungsrekord von 100 Sprachverarbeitungsklopfen 2015. Die Umgebung ist Ubuntu 16.04 LTS + Python 3.5.2 : : Anaconda 4.1.1 (64-Bit). Klicken Sie hier, um eine Liste der vergangenen Schläge anzuzeigen (http://qiita.com/segavvy/items/fb50ba8097d59475f760).
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.
Ersetzen Sie jedes Tabulatorzeichen durch ein Leerzeichen. Verwenden Sie zur Bestätigung den Befehl sed, den Befehl tr oder den Befehl expand.
Der fertige Code:
main.py
# coding: utf-8
fname = 'hightemp.txt'
with open(fname) as data_file:
for line in data_file:
print(line.replace('\t', ' '), end='')
Ausführungsergebnis:
Terminal
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
Der UNIX-Befehl wurde vom Shell-Skript bestätigt.
test.sh
#!/bin/sh
#sed s Befehl: s/Suchmuster/Ersatzschnur/g (alle ersetzen)
sed 's/\t/ /g' hightemp.txt
tr
und expand
hinzufügen.test2.sh
#!/bin/sh
#tr Befehl
tr '\t' ' ' < hightemp.txt
test3.sh
#!/bin/sh
#Befehl erweitern
expand --tabs=1 hightemp.txt
Ausführungsergebnis:
Terminal
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
Das Ergebnis war das gleiche.
Da die Zieldatei diesmal klein ist, ist es möglicherweise möglich, alles auf einmal zu lesen und zu ersetzen. Da jedoch sed
oben im Befehl zur Bestätigung aufgeführt ist, dachte ich, dass ich möchte, dass Sie die Stream-Verarbeitung als Absicht der Frage lernen. Daher wird es implementiert, indem es nach und nach gelesen wird.
sed
Der Befehl sed
ist ziemlich kompliziert und ich konnte ihn mit man sed
überhaupt nicht verstehen, aber Wikipedia-Erklärung: sed (Computer) Ich habe einen Überblick mit.
Der diesmal verwendete Befehl "sed" gibt das Suchmuster mit einem regulären Ausdruck an, aber das "\ t", das die Registerkarte angibt, entspricht dem regulären Ausdruck, sodass ich ihn ersetzen kann, ohne den regulären Ausdruck zu kennen. Reguläre Ausdrücke sind das Thema von Kapitel 3 dieses Klopfens, also werden wir dort lernen.
tr
tr
ersetzt ihn, wenn Sie zwei Zeichen angeben. Da die Zieldaten von der Standardeingabe angegeben werden müssen, werden sie mit <
umgeleitet. Bitte überprüfen Sie "Mann" für Details.expand
expand
konvertiert Tabulatoren in Leerzeichen. Standardmäßig ist die Breite der Registerkarte auf 8 Zeichen festgelegt und in Leerzeichen konvertiert. Daher wird die Option "Registerkarten" verwendet, um die Breite der Registerkarte auf 1 Zeichen festzulegen. Bitte überprüfen Sie "Mann" für Details.Das ist alles für den 12. Schlag. Wenn Sie Fehler haben, würde ich mich freuen, wenn Sie darauf hinweisen könnten.
Recommended Posts