Python unerfahrene Person versucht, 100 Sprachverarbeitung 14-16 zu klopfen

Wenn Sie ernsthaft arbeiten, überspringen Sie Beiträge, Wenn Sie ernsthaft posten, überspringen Sie die Arbeit.

Dies ist ein schwieriges Problem ... (ernst) (Ich mache es nicht in den Ferien)

Dies ist eine Fortsetzung davon. Python unerfahrene Person versucht, 100 Sprachverarbeitung 10 ~ 13 zu klopfen https://qiita.com/earlgrey914/items/afdb6458a2c9f1c00c2e


14. Geben Sie N Zeilen von Anfang an aus

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.

Es scheint, dass Sie Folgendes schreiben können, um das Befehlszeilenargument zu erhalten.

arg.py


import sys
args = sys.argv


Referenz-URL
https://qiita.com/orange_u/items/3f0fb6044fd5ee2c3a37

Der Grund, warum args [1] und der Index bei 1 beginnen, kann anhand des Ausführungsergebnisses verstanden werden. Wie Sie dem Ausführungsergebnis entnehmen können, werden die Werte als Liste zurückgegeben

Hmmmm. ** Befehlszeilenargumente werden als Liste zurückgegeben und zählen von 1. ** ** **

Nun, die Problemstellung ist ein wenig esoterisch, aber wenn "2" als Befehlszeilenargument übergeben wird, frage ich mich, ob ich zwei Zeilen von "merge.txt" ausgeben soll.

Wie wäre es damit?

otto.py


import os.path
import sys

os.chdir((os.path.dirname(os.path.abspath(__file__))))

args = sys.argv
linedata = []

with open('merge.txt', mode="r") as f:
    linedata = f.read().splitlines()
    print(linedata[args[1])])
[ec2-user@ip-172-31-34-215 02]$ python3 enshu14.py 2
Traceback (most recent call last):
  File "enshu14.py", line 11, in <module>
    print(linedata[args[1]])
TypeError: list indices must be integers or slices, not str

Hoppla, die Liste der ** Befehlszeilenargumente args scheint als Zeichenfolge zurückgegeben zu werden. ** ** **

Der Eingabewert wird als Zeichenfolgentyp behandelt

Konvertieren Sie nun von einer Zeichenfolge in eine Ganzzahl. Es ist "int (args [1])"

enshu14.py


import os.path
import sys

os.chdir((os.path.dirname(os.path.abspath(__file__))))

args = sys.argv
linedata = []

with open('merge.txt', mode="r") as f:
    linedata = f.read().splitlines()

for i in range(int(args[1])):
    print(linedata[i])

Überprüfen Sie dies, indem Sie das Argument auf 2 oder 5 setzen.

[ec2-user@ip-172-31-34-215 02]$ python3 enshu14.py 2
Präfektur Kochi Egawazaki
Kumagai, Präfektur Saitama
[ec2-user@ip-172-31-34-215 02]$ python3 enshu14.py 5
Präfektur Kochi Egawazaki
Kumagai, Präfektur Saitama
Tajimi, Präfektur Gifu
Präfektur Yamagata Yamagata
Präfektur Yamanashi Kofu
[ec2-user@ip-172-31-34-215 02]$ 

Na einfach. Vergleiche mit dem Kopf.

[ec2-user@ip-172-31-34-215 02]$ head -n 2 merge.txt
Präfektur Kochi Egawazaki
Kumagai, Präfektur Saitama
[ec2-user@ip-172-31-34-215 02]$ head -n 5 merge.txt
Präfektur Kochi Egawazaki
Kumagai, Präfektur Saitama
Tajimi, Präfektur Gifu
Präfektur Yamagata Yamagata
Präfektur Yamanashi Kofu
[ec2-user@ip-172-31-34-215 02]$ 

~ 5 Tage überspringen ~

Geben Sie die letzten N Zeilen aus

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.

Um auf die Liste vom Ende zu verweisen, sollten Sie sich anscheinend auf "[-1], [-2], [-3], ..." beziehen.


Referenz-URL
https://qiita.com/komeiy/items/971ead35d33c25923222

Was soll ich mit diesem Ausgabeergebnis machen? Wenn es eine Liste von "[" a "," b "," c "," d "]" gibt und das Argument "2" ist, sollte es als "c, d" ausgegeben werden? Ist es d, c? Es wird gesagt, dass Sie mit Schwanz überprüfen sollten, also lassen Sie uns zuerst überprüfen, wie es mit Schwanz ausgegeben wird.

[ec2-user@ip-172-31-34-215 02]$ tail -n 2 merge.txt
Tsuruoka, Präfektur Yamagata
Präfektur Aichi Nagoya
[ec2-user@ip-172-31-34-215 02]$ tail -n 5 merge.txt
Hatoyama, Präfektur Saitama
Toyonaka, Osaka
Präfektur Yamanashi Otsuki
Tsuruoka, Präfektur Yamagata
Präfektur Aichi Nagoya

Das war's. Sie sollten in der Reihenfolge "c, d" ausgeben.

enshu15.py


import os.path
import sys

os.chdir((os.path.dirname(os.path.abspath(__file__))))

args = sys.argv
linedata = []

with open('merge.txt', mode="r") as f:
    linedata = f.read().splitlines()

linedata_reverse =[] 
for i in range(int(args[1])):
    linedata_reverse.append(linedata[-i-1])
    
for i in (reversed(linedata_reverse)):
    print(i)

Äh. Es ist fertig. Das Umblättern der Liste ist "umgekehrt ()".

[ec2-user@ip-172-31-34-215 02]$ python3 enshu15.py 2
Tsuruoka, Präfektur Yamagata
Präfektur Aichi Nagoya
[ec2-user@ip-172-31-34-215 02]$ python3 enshu15.py 5
Hatoyama, Präfektur Saitama
Toyonaka, Osaka
Präfektur Yamanashi Otsuki
Tsuruoka, Präfektur Yamagata
Präfektur Aichi Nagoya

Das Ergebnis ist auch OK.

** Ich denke, dass Python viele nützliche Standardfunktionen wie Listeninversion und Slicing hat. ** ** **

16. Teilen Sie die Datei in N.

Empfangen Sie die natürliche Zahl N mithilfe von Befehlszeilenargumenten und teilen Sie die Eingabedatei zeilenweise in N. Erzielen Sie die gleiche Verarbeitung mit dem Befehl split.

Versuchen wir zunächst, wie der Befehl "split" aussieht. ** Wie Sie vielleicht bemerkt haben, bin ich neu in Python und neu in UNIX-Befehlen. ** ** **

[ec2-user@ip-172-31-34-215 02]$ split -l 2 -d merge.txt test
[ec2-user@ip-172-31-34-215 02]$ ll
total 112
-rw-rw-r-- 1 ec2-user ec2-user 435 Mar 19 17:12 merge.txt
-rw-rw-r-- 1 ec2-user ec2-user  37 Mar 25 15:48 test00
-rw-rw-r-- 1 ec2-user ec2-user  37 Mar 25 15:48 test01
-rw-rw-r-- 1 ec2-user ec2-user  43 Mar 25 15:48 test02
-rw-rw-r-- 1 ec2-user ec2-user  34 Mar 25 15:48 test03
-rw-rw-r-- 1 ec2-user ec2-user  34 Mar 25 15:48 test04
-rw-rw-r-- 1 ec2-user ec2-user  37 Mar 25 15:48 test05
-rw-rw-r-- 1 ec2-user ec2-user  37 Mar 25 15:48 test06
-rw-rw-r-- 1 ec2-user ec2-user  37 Mar 25 15:48 test07
-rw-rw-r-- 1 ec2-user ec2-user  34 Mar 25 15:48 test08
-rw-rw-r-- 1 ec2-user ec2-user  34 Mar 25 15:48 test09
-rw-rw-r-- 1 ec2-user ec2-user  34 Mar 25 15:48 test10
-rw-rw-r-- 1 ec2-user ec2-user  37 Mar 25 15:48 test11
[ec2-user@ip-172-31-34-215 02]$ cat test00 
Präfektur Kochi Egawazaki
Kumagai, Präfektur Saitama

Das war's. Lassen Sie uns zuerst den Teil "N Division für jede Zeile" machen.

enshu16.py


import os.path
import sys

os.chdir((os.path.dirname(os.path.abspath(__file__))))

args = sys.argv
a = int(args[1])
linedata = []

with open('merge.txt', mode="r") as f:
    linedata = f.read().splitlines()

for i in range(0, len(linedata), a):
    print(linedata[i:i+a:])

Vorläufig konnte ich die Liste so anzeigen, als ob sie geteilt wäre.

[ec2-user@ip-172-31-34-215 02]$ python3 enshu16.py 1
['Präfektur Kochi\t Egawasaki']
['Saitama\t Kumagai']
['Präfektur Gifu\t Tajimi']
['Präfektur Yamagata\t Yamagata']
['Präfektur Yamanashi\t Kofu']
['Präfektur Wakayama\t Perücke']
['Präfektur Shizuoka\t Tenryu']
['Präfektur Yamanashi\t Katsunuma']
['Saitama\t Koshiya']
['Präfektur Gunma\t Tatebayashi']
['Präfektur Gunma\t Kamisatomi']
['Präfektur Aichi\t Ainishi']
['Präfektur Chiba\t Ushihisa']
['Präfektur Shizuoka\t Sakuma']
['Präfektur Ehime\t Uwajima']
['Präfektur Yamagata\t Sakata']
['Präfektur Gifu\t Mino']
['Präfektur Gunma\t Maebashi']
['Präfektur Chiba\t Mobara']
['Saitama\t Hatoyama']
['Präfektur Osaka\t Toyonaka']
['Präfektur Yamanashi\t Otsuki']
['Präfektur Yamagata\t Tsuruoka']
['Präfektur Aichi\t Nagoya']
[ec2-user@ip-172-31-34-215 02]$ python3 enshu16.py 2
['Präfektur Kochi\t Egawasaki', 'Saitama\t Kumagai']
['Präfektur Gifu\t Tajimi', 'Präfektur Yamagata\t Yamagata']
['Präfektur Yamanashi\t Kofu', 'Präfektur Wakayama\t Perücke']
['Präfektur Shizuoka\t Tenryu', 'Präfektur Yamanashi\t Katsunuma']
['Saitama\t Koshiya', 'Präfektur Gunma\t Tatebayashi']
['Präfektur Gunma\t Kamisatomi', 'Präfektur Aichi\t Ainishi']
['Präfektur Chiba\t Ushihisa', 'Präfektur Shizuoka\t Sakuma']
['Präfektur Ehime\t Uwajima', 'Präfektur Yamagata\t Sakata']
['Präfektur Gifu\t Mino', 'Präfektur Gunma\t Maebashi']
['Präfektur Chiba\t Mobara', 'Saitama\t Hatoyama']
['Präfektur Osaka\t Toyonaka', 'Präfektur Yamanashi\t Otsuki']
['Präfektur Yamagata\t Tsuruoka', 'Präfektur Aichi\t Nagoya']
[ec2-user@ip-172-31-34-215 02]$ python3 enshu16.py 5
['Präfektur Kochi\t Egawasaki', 'Saitama\t Kumagai', 'Präfektur Gifu\t Tajimi', 'Präfektur Yamagata\t Yamagata', 'Präfektur Yamanashi\t Kofu']
['Präfektur Wakayama\t Perücke', 'Präfektur Shizuoka\t Tenryu', 'Präfektur Yamanashi\t Katsunuma', 'Saitama\t Koshiya', 'Präfektur Gunma\t Tatebayashi']
['Präfektur Gunma\t Kamisatomi', 'Präfektur Aichi\t Ainishi', 'Präfektur Chiba\t Ushihisa', 'Präfektur Shizuoka\t Sakuma', 'Präfektur Ehime\t Uwajima']
['Präfektur Yamagata\t Sakata', 'Präfektur Gifu\t Mino', 'Präfektur Gunma\t Maebashi', 'Präfektur Chiba\t Mobara', 'Saitama\t Hatoyama']
['Präfektur Osaka\t Toyonaka', 'Präfektur Yamanashi\t Otsuki', 'Präfektur Yamagata\t Tsuruoka', 'Präfektur Aichi\t Nagoya']

Als nächstes wird in einer Datei gespeichert. In diesem Problem muss die Originaldatei ** in eine Datei mit dem Namen des zweiten Arguments + dem Namen der Seriennummer ** aufgeteilt werden. Was soll ich machen?

~ 10 Minuten google ~


Referenz-URL
https://news.mynavi.jp/article/zeropython-40/

Wenn Sie so etwas schreiben, können Sie die Seriennummerndatei speichern.

kou.py


for i in range(5):
    print("Prüfung-{0:03d}.jpg ".format(i + 1))
Prüfung-001.jpg
Prüfung-002.jpg
Prüfung-003.jpg
Prüfung-004.jpg
Prüfung-005.jpg

Es scheint etwas namens format () zu verwenden. ** Ich persönlich finde es extrem schwierig. ** Warum kann ich .format () direkt zu den in doppelten Anführungszeichen eingeschlossenen Zeichen hinzufügen und den Wert übergeben ...? Ich denke, es liegt an der Art und Weise, wie {} geschrieben ist, aber was ist diese Notation?

~ 5 Minuten google ~

Hmmm, es kommt nicht schick. Es scheint, dass Sie andere Schreibstile verwenden können, ohne format () separat zu verwenden. Verwenden wir also andere Schreibstile. ** Wenn Sie etwas verwenden, das Sie nicht verstehen, "weil es sich bewegt", werden Sie es später noch besser verstehen. ** Es ist eine empirische Regel.


Referenz-URL
https://gammasoft.jp/blog/python-string-format/

Umschreiben ↓

tes.py


for i in range(3):
    with open("Prüfung"+ str(i+1) +".txt", 'a') as f:
        print("Tesuto", file=f )
[ec2-user@ip-172-31-34-215 02]$ ll
total 124
-rw-rw-r-- 1 ec2-user ec2-user   3 Mar 27 17:15 Test 1.txt
-rw-rw-r-- 1 ec2-user ec2-user   3 Mar 27 17:15 Test 2.txt
-rw-rw-r-- 1 ec2-user ec2-user   3 Mar 27 17:15 Test 3.txt

Okay, das ist in Ordnung. Ich musste lediglich den Verkettungsoperator verwenden. Es mag unangenehm sein, aber es ist für mich am einfachsten zu verstehen.

Erstellen Sie nun die Antwort auf die Aufgabe.

enshu16.py


import os.path
import sys

os.chdir((os.path.dirname(os.path.abspath(__file__))))

args = int(sys.argv[1])
linedata = []

with open('merge.txt', mode="r") as f:
    linedata = f.read().splitlines()

for i in range(0, len(linedata), args):
    with open("Prüfung"+ str(i+1) +".txt", 'a') as f:
        output = linedata[i:i+args:]
        for j in output:
            print(j, file =f)
[ec2-user@ip-172-31-34-215 02]$ python3 enshu16.py 2

[ec2-user@ip-172-31-34-215 02]$ ll
total 160
-rw-rw-r-- 1 ec2-user ec2-user  37 Mar 27 17:30 Test 11.txt
-rw-rw-r-- 1 ec2-user ec2-user  37 Mar 27 17:30 Test 13.txt
-rw-rw-r-- 1 ec2-user ec2-user  37 Mar 27 17:30 Test 15.txt
-rw-rw-r-- 1 ec2-user ec2-user  34 Mar 27 17:30 Test 17.txt
-rw-rw-r-- 1 ec2-user ec2-user  34 Mar 27 17:30 Test 19.txt
-rw-rw-r-- 1 ec2-user ec2-user  37 Mar 27 17:30 Test 1.txt
-rw-rw-r-- 1 ec2-user ec2-user  34 Mar 27 17:30 Test 21.txt
-rw-rw-r-- 1 ec2-user ec2-user  37 Mar 27 17:30 Test 23.txt
-rw-rw-r-- 1 ec2-user ec2-user  37 Mar 27 17:30 Test 3.txt
-rw-rw-r-- 1 ec2-user ec2-user  43 Mar 27 17:30 Test 5.txt
-rw-rw-r-- 1 ec2-user ec2-user  34 Mar 27 17:30 Test 7.txt
-rw-rw-r-- 1 ec2-user ec2-user  34 Mar 27 17:30 Test 9.txt
-rw-rw-r-- 1 ec2-user ec2-user 530 Mar 27 17:29 enshu16.py
-rw-rw-r-- 1 ec2-user ec2-user 435 Mar 19 17:12 merge.txt

[ec2-user@ip-172-31-34-215 02]$Katzentest 1.txt 
Präfektur Kochi Egawazaki
Kumagai, Präfektur Saitama

Es ist fertig! Da die Seriennummer nicht mit 0 gefüllt ist, ist die Bestellung nicht zumutbar. ** Ich erkannte, dass format () wahrscheinlich nützlich wäre, wenn die Seriennummer mit Nullen gefüllt würde. ** ** ** Ich werde es dieses Mal nicht benutzen, aber ich werde es bald benutzen.

Es hat wahrscheinlich ungefähr 3 Stunden gedauert! !! !! !! !! !! !! !! Kapitel 2 ist relativ einfach, nicht wahr? Außerdem gewöhne ich mich daran, Qiita zu posten, und im Gegenteil, ich mache es, weil ich nicht motiviert bin.

Recommended Posts

Python unerfahrene Person versucht, 100 Sprachverarbeitung 14-16 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 07-09 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 10 ~ 13 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 05-06 zu klopfen
Python unerfahrene Person versucht, 100 Sprachverarbeitung 00-04 zu klopfen
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitung Knock Kapitel 1 in Python
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (05 ~ 09)
100 Sprachverarbeitung Knock Kapitel 1 von Python
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (00 ~ 04)
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
100 Sprachverarbeitung klopfen 2020 [00 ~ 39 Antwort]
100 Sprachverarbeitung klopfen 2020 [00-79 Antwort]
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 17
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
Python: Verarbeitung natürlicher Sprache
100 Sprachverarbeitung Knock-52: Stemming
100 Sprachverarbeitung Knock Kapitel 1
Einführung in die Python-Sprache
100 Amateur-Sprachverarbeitungsklopfen: 07
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 Amateur-Sprachverarbeitungsklopfen: 09
100 Amateur-Sprachverarbeitungsklopfen: 47
100 Sprachverarbeitung Knock-53: Tokenisierung
100 Amateur-Sprachverarbeitungsklopfen: 97
100 Sprachverarbeitung klopfen 2020 [00 ~ 59 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 67
Eintrag, bei dem Python-Anfänger ihr Bestes geben, um nach und nach 100 Sprachprozesse zu beenden
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock-50: Satzumbruch
100 Sprachverarbeitung Knock-25: Vorlagenextraktion
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
100 Sprachverarbeitung Knock-56: Co-Referenz-Analyse
Lösen von 100 Sprachverarbeitungsklopfen 2020 (01. "Patatokukashi")
100 Amateur-Sprachverarbeitungsklopfen: Zusammenfassung
Sprachverarbeitung 100 Knocks-43: Extrahieren Sie Klauseln mit Nomenklatur in Bezug auf Klauseln mit Verben
[Python] Versuchen Sie, Ramen-Shops durch Verarbeitung natürlicher Sprache zu klassifizieren
100 Sprachverarbeitung Knock-42: Anzeige der Phrase der betroffenen Person und der betroffenen Person
Überlassen Sie die mühsame Verarbeitung Python
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
100 Sprachverarbeitung Knock 2020 Kapitel 4: Morphologische Analyse
100 Sprachverarbeitung Knock 2020 Kapitel 9: RNN, CNN
100 Sprachverarbeitung Knock-76 (mit Scicit-Learn): Beschriftung