[PYTHON] 100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 2 Grundlagen des UNIX-Befehls (erste Hälfte)

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.

</ i> 10. Zählen der Anzahl der Zeilen

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.

</ i> 11. Ersetzen Sie Tabulatoren durch Leerzeichen

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)

</ i> 12. Speichern Sie die erste Spalte in col1.txt und die zweite Spalte in col2.txt

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)

</ i> 13. Führen Sie col1.txt und col2.txt zusammen

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)

</ i> 14. N Zeilen von Anfang an ausgeben

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