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
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 ~
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. ** ** **
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