Si vous travaillez sérieusement, vous sauterez des messages, Si vous postez sérieusement, vous sauterez le travail.
C'est un problème difficile ... (grave) (Je ne le fais pas en vacances)
C'est une continuation de ceci. Une personne inexpérimentée en Python tente de frapper 100 traitement du langage 10 ~ 13 https://qiita.com/earlgrey914/items/afdb6458a2c9f1c00c2e
Il semble que vous puissiez écrire ce qui suit pour obtenir l'argument de ligne de commande.
arg.py
import sys
args = sys.argv
URL de référence
https://qiita.com/orange_u/items/3f0fb6044fd5ee2c3a37
La raison pour laquelle args [1] et l'index partent de 1 peut être comprise en regardant le résultat de l'exécution. Comme vous pouvez le voir dans le résultat de l'exécution, les valeurs sont renvoyées sous forme de liste
Hmmmm. ** Les arguments de ligne de commande sont renvoyés sous forme de liste, à partir de 1. ** **
Eh bien, l'énoncé du problème est un peu ésotérique, mais si "2" est passé comme argument de ligne de commande, je me demande si je devrais afficher deux lignes de merge.txt
.
Que dis-tu de ça?
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
Oups, la liste des ** arguments de ligne de commande ʻargs` semble être renvoyée sous forme de chaîne. ** **
La valeur d'entrée est traitée comme un type chaîne
Maintenant, convertissez de la chaîne de caractères en entier. ʻInt (args [1]) ʻ n'est-ce pas?
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])
Vérifiez en définissant l'argument sur 2 ou 5.
[ec2-user@ip-172-31-34-215 02]$ python3 enshu14.py 2
Préfecture de Kochi Egawazaki
Kumagai, Préfecture de Saitama
[ec2-user@ip-172-31-34-215 02]$ python3 enshu14.py 5
Préfecture de Kochi Egawazaki
Kumagai, Préfecture de Saitama
Tajimi, préfecture de Gifu
Préfecture de Yamagata Yamagata
Préfecture de Yamanashi Kofu
[ec2-user@ip-172-31-34-215 02]$
Eh bien facile. Comparez avec la tête.
[ec2-user@ip-172-31-34-215 02]$ head -n 2 merge.txt
Préfecture de Kochi Egawazaki
Kumagai, Préfecture de Saitama
[ec2-user@ip-172-31-34-215 02]$ head -n 5 merge.txt
Préfecture de Kochi Egawazaki
Kumagai, Préfecture de Saitama
Tajimi, préfecture de Gifu
Préfecture de Yamagata Yamagata
Préfecture de Yamanashi Kofu
[ec2-user@ip-172-31-34-215 02]$
~ 5 jours à sauter ~
Pour vous référer à la liste depuis la fin, il semble que vous devriez vous référer à [-1], [-2], [-3], ...
.
URL de référence
https://qiita.com/komeiy/items/971ead35d33c25923222
Que dois-je faire avec ce résultat de sortie? S'il existe une liste de `[" a "," b "," c "," d "]" et que l'argument est "2", doit-il être affiché sous la forme "c, d"? Est-ce «d, c»? On dit que vous devriez vérifier avec tail, alors vérifions d'abord comment il est sorti avec tail.
[ec2-user@ip-172-31-34-215 02]$ tail -n 2 merge.txt
Tsuruoka, préfecture de Yamagata
Préfecture d'Aichi Nagoya
[ec2-user@ip-172-31-34-215 02]$ tail -n 5 merge.txt
Hatoyama, Préfecture de Saitama
Toyonaka, Osaka
Préfecture de Yamanashi Otsuki
Tsuruoka, préfecture de Yamagata
Préfecture d'Aichi Nagoya
Je vois. Vous devriez mettre dans l'ordre de «c, d».
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)
Euh. C'est fait. Le retournement de la liste est «inversé ()».
[ec2-user@ip-172-31-34-215 02]$ python3 enshu15.py 2
Tsuruoka, préfecture de Yamagata
Préfecture d'Aichi Nagoya
[ec2-user@ip-172-31-34-215 02]$ python3 enshu15.py 5
Hatoyama, Préfecture de Saitama
Toyonaka, Osaka
Préfecture de Yamanashi Otsuki
Tsuruoka, préfecture de Yamagata
Préfecture d'Aichi Nagoya
Le résultat est également OK.
** Je pense que Python a de nombreuses fonctions standard utiles telles que l'inversion de liste et le découpage. ** **
Essayons d'abord à quoi ressemble la commande split
.
** Comme vous l'avez peut-être remarqué, je suis nouveau sur Python et nouveau sur les commandes UNIX. ** **
[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éfecture de Kochi Egawazaki
Kumagai, Préfecture de Saitama
Je vois. Commençons par créer la partie "Division N pour chaque ligne".
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:])
Pour le moment, j'ai pu afficher la liste comme si elle était fractionnée.
[ec2-user@ip-172-31-34-215 02]$ python3 enshu16.py 1
['Préfecture de Kochi\t Egawasaki']
['Saitama\t Kumagai']
['Préfecture de Gifu\t Tajimi']
['Préfecture de Yamagata\t Yamagata']
['Préfecture de Yamanashi\t Kofu']
['Préfecture de Wakayama\t perruque']
['Préfecture de Shizuoka\t Tenryu']
['Préfecture de Yamanashi\t Katsunuma']
['Saitama\t Koshiya']
['Préfecture de Gunma\t Tatebayashi']
['Préfecture de Gunma\t Kamisatomi']
['Préfecture d'Aichi\t Ainishi']
['Préfecture de Chiba\t Ushihisa']
['Préfecture de Shizuoka\t Sakuma']
['Préfecture d'Ehime\t Uwajima']
['Préfecture de Yamagata\t Sakata']
['Préfecture de Gifu\t Mino']
['Préfecture de Gunma\t Maebashi']
['Préfecture de Chiba\t Mobara']
['Saitama\t Hatoyama']
['Préfecture d'Osaka\t Toyonaka']
['Préfecture de Yamanashi\t Otsuki']
['Préfecture de Yamagata\t Tsuruoka']
['Préfecture d'Aichi\t Nagoya']
[ec2-user@ip-172-31-34-215 02]$ python3 enshu16.py 2
['Préfecture de Kochi\t Egawasaki', 'Saitama\t Kumagai']
['Préfecture de Gifu\t Tajimi', 'Préfecture de Yamagata\t Yamagata']
['Préfecture de Yamanashi\t Kofu', 'Préfecture de Wakayama\t perruque']
['Préfecture de Shizuoka\t Tenryu', 'Préfecture de Yamanashi\t Katsunuma']
['Saitama\t Koshiya', 'Préfecture de Gunma\t Tatebayashi']
['Préfecture de Gunma\t Kamisatomi', 'Préfecture d'Aichi\t Ainishi']
['Préfecture de Chiba\t Ushihisa', 'Préfecture de Shizuoka\t Sakuma']
['Préfecture d'Ehime\t Uwajima', 'Préfecture de Yamagata\t Sakata']
['Préfecture de Gifu\t Mino', 'Préfecture de Gunma\t Maebashi']
['Préfecture de Chiba\t Mobara', 'Saitama\t Hatoyama']
['Préfecture d'Osaka\t Toyonaka', 'Préfecture de Yamanashi\t Otsuki']
['Préfecture de Yamagata\t Tsuruoka', 'Préfecture d'Aichi\t Nagoya']
[ec2-user@ip-172-31-34-215 02]$ python3 enshu16.py 5
['Préfecture de Kochi\t Egawasaki', 'Saitama\t Kumagai', 'Préfecture de Gifu\t Tajimi', 'Préfecture de Yamagata\t Yamagata', 'Préfecture de Yamanashi\t Kofu']
['Préfecture de Wakayama\t perruque', 'Préfecture de Shizuoka\t Tenryu', 'Préfecture de Yamanashi\t Katsunuma', 'Saitama\t Koshiya', 'Préfecture de Gunma\t Tatebayashi']
['Préfecture de Gunma\t Kamisatomi', 'Préfecture d'Aichi\t Ainishi', 'Préfecture de Chiba\t Ushihisa', 'Préfecture de Shizuoka\t Sakuma', 'Préfecture d'Ehime\t Uwajima']
['Préfecture de Yamagata\t Sakata', 'Préfecture de Gifu\t Mino', 'Préfecture de Gunma\t Maebashi', 'Préfecture de Chiba\t Mobara', 'Saitama\t Hatoyama']
['Préfecture d'Osaka\t Toyonaka', 'Préfecture de Yamanashi\t Otsuki', 'Préfecture de Yamagata\t Tsuruoka', 'Préfecture d'Aichi\t Nagoya']
La prochaine étape consiste à enregistrer dans un fichier. Dans ce problème, le fichier d'origine doit être ** divisé en un fichier avec le nom du deuxième argument + le nom du numéro de série **. Que devrais-je faire?
~ 10 minutes sur Google ~
URL de référence
https://news.mynavi.jp/article/zeropython-40/
Si vous écrivez quelque chose comme ça, vous pouvez enregistrer le fichier du numéro de série.
kou.py
for i in range(5):
print("tester-{0:03d}.jpg ".format(i + 1))
tester-001.jpg
tester-002.jpg
tester-003.jpg
tester-004.jpg
tester-005.jpg
Il semble utiliser quelque chose appelé format ()
.
** Personnellement, je trouve cela extrêmement difficile. ** Pourquoi puis-je ajouter .format ()
directement aux caractères entre guillemets doubles et passer la valeur ...?
Je pense que c'est à cause de la façon dont «{}» est écrit, mais quelle est cette notation?
~ 5 minutes sur Google ~
Hmmm, ça ne vient pas chic.
Il semble que vous puissiez l'écrire d'une autre manière sans utiliser format ()
, alors utilisons une autre manière.
** Si vous utilisez quelque chose que vous ne comprenez pas "parce qu'il bouge", vous le comprendrez encore plus plus tard. ** C'est une règle empirique.
URL de référence
https://gammasoft.jp/blog/python-string-format/
Réécrire ↓
tes.py
for i in range(3):
with open("tester"+ 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 essai 1.txt
-rw-rw-r-- 1 ec2-user ec2-user 3 Mar 27 17:15 essai 2.txt
-rw-rw-r-- 1 ec2-user ec2-user 3 Mar 27 17:15 test 3.txt
Très bien, c'est bien. Tout ce que j'avais à faire était d'utiliser l'opérateur de concaténation. C'est peut-être gênant, mais c'est le plus facile à comprendre pour moi.
Créez maintenant la réponse à la tâche.
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("tester"+ 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 essai 11.txt
-rw-rw-r-- 1 ec2-user ec2-user 37 Mar 27 17:30 essai 13.txt
-rw-rw-r-- 1 ec2-user ec2-user 37 Mar 27 17:30 essai 15.txt
-rw-rw-r-- 1 ec2-user ec2-user 34 Mar 27 17:30 essai 17.txt
-rw-rw-r-- 1 ec2-user ec2-user 34 Mar 27 17:30 essai 19.txt
-rw-rw-r-- 1 ec2-user ec2-user 37 Mar 27 17:30 essai 1.txt
-rw-rw-r-- 1 ec2-user ec2-user 34 Mar 27 17:30 essai 21.txt
-rw-rw-r-- 1 ec2-user ec2-user 37 Mar 27 17:30 essai 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 essai 7.txt
-rw-rw-r-- 1 ec2-user ec2-user 34 Mar 27 17:30 essai 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]$test de chat 1.txt
Préfecture de Kochi Egawazaki
Kumagai, Préfecture de Saitama
C'est fait!
Puisque le numéro de série n'est pas rempli avec 0, la commande est déraisonnable.
** J'ai réalisé que format ()
serait probablement utile pour remplir le numéro de série avec des zéros. ** **
Je ne l'utiliserai pas cette fois, mais je l'utiliserai bientôt.
Cela a probablement pris environ 3 heures jusqu'à présent! !! !! !! !! !! !! !! Le chapitre 2 est relativement simple, n'est-ce pas? Aussi, je m'habitue à poster des qiita, et au contraire, je le fais parce que je ne suis pas motivé.
Recommended Posts