Kapitel 2 von heute. Dies ist eine Fortsetzung davon. Python unerfahrene Person versucht, 100 Sprachverarbeitung 07-09 zu klopfen https://qiita.com/earlgrey914/items/a7b6781037bc0844744b
Als ich in Kapitel 1 sagte "es hat 7 Stunden gedauert", wurde ich gefragt "Was ist dein Job?" Natürlich tue ich das.
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.
Verwenden Sie diese Datei hightemp.txt als Eingabedatei
Der Inhalt von hightemp.txt sieht folgendermaßen aus. Tabulatorgetrennte 24-mal-4-Daten.
hightemp.txt
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
Ich verwende also AWS Cloud9 als Python-Ausführungsumgebung Starten Sie nach dem Hochladen dieser txt-Datei dort.
Abgesehen davon ist Cloud 9 wirklich nützlich. Ich bin froh, native Cloud-Apps mit Cloud9 entwickeln zu können (ich sage etwas Seltsames)
Gut. Zunächst, wie man eine txt-Datei mit Python liest. Ich weiß das. Ich habe .txt an der gleichen Stelle wie .py abgelegt, daher sollte dies in Ordnung sein.
yomikoku.py
with open('hightemp.txt') as f:
s = f.read()
print(s)
Traceback (most recent call last):
File "/home/ec2-user/knock/02/enshu11.py", line 6, in <module>
with open('hightemp.txt') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'hightemp.txt'
Oh. Es ist nicht gut.
~ 3 Minuten google ~
Referenz-URL
https://qiita.com/nagamee/items/b7d1b02074293fdfdfff
korede.py
import os.path
#Der Ursprung ist der Speicherort dieser py-Datei
os.chdir((os.path.dirname(os.path.abspath(__file__))))
with open('hightemp.txt') as f:
s = f.read()
print(s)
Präfektur Kochi Egawasaki 41 2013-08-12
40 Kumagai, Präfektur Saitama.9 2007-08-16
:
Das ist in Ordnung.
Ist das os.chdir ((os.path.dirname (os.path.abspath (__ file __))))
Magie? Ist es in Ordnung, in Zukunft zu schreiben?
Abhängig von der Ausführungsumgebung kann es notwendig oder unnötig sein (oder nicht geschrieben) ...
Es scheint also mehrere Möglichkeiten zu geben, den Inhalt nach "open ()" der Datei zu lesen. In diesem Problem heißt es "Zähle die Anzahl der Zeilen", daher ist es besser, "readlines ()" zu verwenden, in dem jede Zeile aufgelistet ist.
enshu10.py
import os.path
#Der Ursprung ist der Speicherort dieser py-Datei
os.chdir((os.path.dirname(os.path.abspath(__file__))))
with open('hightemp.txt') as f:
s = f.readlines()
print(len(s))
24
Es ist einfach. Es wird gesagt, dass dasselbe mit UNIX-Befehlen gemacht werden sollte, also führen Sie es aus.
[ec2-user@ip-172-31-34-215 02]$ wc -l hightemp.txt
24 hightemp.txt
Der Dateiname ist im Weg. Lass uns Katze beißen.
[ec2-user@ip-172-31-34-215 02]$ cat hightemp.txt | wc -l
24
Ist es nicht einfacher als Kapitel 1?
eunshu11.py
import os.path
os.chdir((os.path.dirname(os.path.abspath(__file__))))
with open('hightemp.txt', mode="r") as f:
s = f.read()
tikango = s.replace("\t", " ")
with open('hightemp.txt', mode="w") as f:
f.write(tikango)
hightemp.txt
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
Versuchen Sie, es auch im Terminal durch sed zu ersetzen.
[ec2-user@ip-172-31-34-215 02]$ sed -i -e "s/\t/ /g" hightemp.txt
[ec2-user@ip-172-31-34-215 02]$ cat hightemp.txt
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-0
Ich habe das Gefühl, dass es sofort einfacher wird.
enshu12.py
import os.path
os.chdir((os.path.dirname(os.path.abspath(__file__))))
with open('hightemp.txt', mode="r") as f:
linedata = f.readlines()
for l in linedata:
with open('col1.txt', mode="a") as c1:
c1.write(l.split(" ")[0] + "\r")
with open('col2.txt', mode="a") as c2:
c2.write(l.split(" ")[1] +"\r")
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
Der Befehl cut sieht folgendermaßen aus.
[ec2-user@ip-172-31-34-215 02]$ cut -f 1 -d " " hightemp.txt > col1_command.txt
[ec2-user@ip-172-31-34-215 02]$ cut -f 2 -d " " hightemp.txt > col2_command.txt
Vergleichen Sie mit diff ...
[ec2-user@ip-172-31-34-215 02]$ diff col1.txt col1_command.txt
1c1,24
Präfektur Aichi
\ No newline at end of file
---
>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
Sind! ??
Dies liegt daran, dass es auch mit cat col1.txt
nicht angezeigt wird ...
** Wegen des Zeilenvorschubcodes! ** ** **
Also habe ich den Zeilenvorschubcode von "\ r" in "\ n" geändert und beim Schreiben der Datei "UTF-8" als Codierung angegeben.
enshu13.py
import os.path
os.chdir((os.path.dirname(os.path.abspath(__file__))))
with open('hightemp.txt', mode="r") as f:
linedata = f.readlines()
for l in linedata:
with open('col1.txt', mode="a", encoding="utf-8") as c1:
c1.write(l.split(" ")[0] + "\n")
with open('col2.txt', mode="a", encoding="utf-8") as c2:
c2.write(l.split(" ")[1] +"\n")
Ausführungsbestätigung
[ec2-user@ip-172-31-34-215 02]$ python3 enshu12.py
[ec2-user@ip-172-31-34-215 02]$
[ec2-user@ip-172-31-34-215 02]$ cut -f 1 -d " " hightemp.txt > col1_command.txt
[ec2-user@ip-172-31-34-215 02]$ cut -f 2 -d " " hightemp.txt > col2_command.txt
[ec2-user@ip-172-31-34-215 02]$ diff col1.txt col1_command.txt
[ec2-user@ip-172-31-34-215 02]$ diff col2.txt col2_command.txt
[ec2-user@ip-172-31-34-215 02]$
Es ist in Ordnung.
Vielleicht ist es so, aber gibt es einen besseren Weg?
tabun.py
with open col1.txt
Fügen Sie alle Zeilen in Array 1 ein
with open col2.txt
Fügen Sie alle Zeilen in Array 2 ein
for[i]
Ausgabedatei= write(Array 1[i] + "\t" +Sequenz 2[i])
~ 20 Minuten später ~
enshu13.py
import os.path
os.chdir((os.path.dirname(os.path.abspath(__file__))))
linedata_col1 = []
linedata_col2 = []
with open('col1.txt', mode="r") as f:
linedata_col1 = f.read().splitlines()
with open('col2.txt', mode="r") as f:
linedata_col2 = f.read().splitlines()
with open('merge.txt', mode="a", encoding="utf-8") as f:
for c1, c2 in zip(linedata_col1, linedata_col2):
f.write(c1 + "\t" + c2 + "\n")
merge.txt
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
Der Punkt des Einfallsreichtums ist linien_col1 = f.read (). Splitlines ()
.
** Es ist eine Ameise, Zeile für Zeile mit f.readlines ()
zu lesen, aber dann wird es eine Liste mit Zeilenvorschubcode wie ↓ sein. ** **.
readlinesdato.py
with open('col1.txt', mode="r") as f:
linedata_col1 = f.readlines()
print(linedata_col1)
['Präfektur Kochi\n', 'Saitama\n', 'Präfektur Gifu\n', 'Präfektur Yamagata\n', 'Präfektur Yamanashi\n', 'Präfektur Wakayama\n', 'Präfektur Shizuoka\n', 'Präfektur Yamanashi\n', 'Saitama\n', 'Präfektur Gunma\n', 'Präfektur Gunma\n', 'Präfektur Aichi\n', 'Präfektur Chiba\n', 'Präfektur Shizuoka\n', 'Präfektur Ehime\n', 'Präfektur Yamagata\n', 'Präfektur Gifu\n', 'Präfektur Gunma\n', 'Präfektur Chiba\n', 'Saitama\n', 'Präfektur Osaka\n', 'Präfektur Yamanashi\n', 'Präfektur Yamagata\n', 'Präfektur Aichi\n']
Ich dachte, es wäre am besten, ** read ()
zu verwenden, um es als Blockobjekt einschließlich des Zeilenvorschubcodes zu lesen und es mit dem Zeilenvorschubcode split ()
aufzulisten, anstatt sich die Mühe zu machen, diesen Zeilenvorschubcode zu löschen.
Dann mit Paste vergleichen.
[ec2-user@ip-172-31-34-215 02]$ python3 enshu13.py
[ec2-user@ip-172-31-34-215 02]$ paste col1.txt col2.txt > merge_command.txt
[ec2-user@ip-172-31-34-215 02]$ diff merge.txt merge_command.txt
[ec2-user@ip-172-31-34-215 02]$
Es ist ziemlich einfach und die Ergebnisüberprüfung ist problematisch geworden, weil die Dateien eingeklemmt sind. Lass uns morgen weitermachen ~ ** Bisher hat es 2 Stunden gedauert! !! ** Ich mache es faul, also dachte ich, es wäre diesmal sehr hilfreich.
Recommended Posts