Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 14-16

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


14. Sortie de N lignes depuis le début

Recevez le nombre naturel N au moyen d'un argument de ligne de commande, et affichez uniquement les N premières lignes de l'entrée. Utilisez la commande head pour confirmation.

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 ~

Sortie des N dernières lignes

Recevez le nombre naturel N au moyen d'un argument de ligne de commande, et affichez uniquement les N dernières lignes de l'entrée. Utilisez la commande tail pour confirmation.

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

16. Divisez le fichier en N

Recevez le nombre naturel N par des moyens tels que des arguments de ligne de commande et divisez le fichier d'entrée en N ligne par ligne. Réalisez le même traitement avec la commande de fractionnement.

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

Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 14-16
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 07-09
Une personne inexpérimentée en Python tente de frapper 100 traitement du langage 10 ~ 13
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 05-06
Une personne inexpérimentée en Python essaie de frapper 100 traitement du langage 00-04
100 coups de traitement du langage avec Python 2015
100 Language Processing Knock Chapitre 1 (Python)
100 Language Processing Knock Chapitre 2 (Python)
100 traitements de langage avec Python
100 Language Processing Knock Chapitre 1 en Python
100 traitements de langage avec Python (chapitre 3)
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (05 ~ 09)
100 Language Processing Knock Chapitre 1 par Python
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (00 ~ 04)
100 coups de traitement linguistique (2020): 28
100 coups de traitement linguistique (2020): 38
100 traitement de la langue frapper 00 ~ 02
100 traitements de langage avec Python (chapitre 2, partie 2)
100 traitements de langage avec Python (chapitre 2, partie 1)
100 traitements linguistiques Knock 2020 [00 ~ 39 réponse]
100 langues de traitement knock 2020 [00-79 réponse]
100 traitements linguistiques Knock 2020 [00 ~ 69 réponse]
100 coups de traitement du langage amateur: 17
100 traitements linguistiques Knock 2020 [00 ~ 49 réponse]
Python: traitement du langage naturel
100 Traitement du langage Knock-52: Stemming
100 Traitement du langage Knock Chapitre 1
Introduction au langage Python
100 coups de langue amateur: 07
100 Language Processing Knock 2020 Chapitre 3
100 Language Processing Knock 2020 Chapitre 2
100 coups de traitement du langage amateur: 09
100 coups en traitement du langage amateur: 47
Traitement 100 langues knock-53: Tokenisation
100 coups de traitement du langage amateur: 97
100 traitements linguistiques Knock 2020 [00 ~ 59 réponse]
100 coups de traitement du langage amateur: 67
Entrée où les débutants en Python font de leur mieux pour frapper petit à petit 100 processus de langage
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
100 traitement du langage Knock-51: découpage de mots
100 Language Processing Knock-58: Extraction de Taple
100 Language Processing Knock-57: Analyse des dépendances
100 traitement linguistique knock-50: coupure de phrase
100 Language Processing Knock-25: Extraction de modèles
Traitement du langage 100 Knock-87: similitude des mots
J'ai essayé 100 traitements linguistiques Knock 2020
100 Language Processing Knock-56: analyse de co-référence
Résolution de 100 traitements linguistiques Knock 2020 (01. "Patatokukashi")
100 coups de traitement du langage amateur: Résumé
Traitement du langage 100 knocks-43: Extraire les clauses contenant la nomenclature liée aux clauses contenant des verbes
[Python] Essayez de classer les boutiques de ramen par traitement du langage naturel
100 traitement de la langue knock-42: Affichage de la phrase de la personne concernée et de la personne concernée
Laissez le traitement gênant à Python
100 Language Processing Knock 2020 Chapitre 2: Commandes UNIX
100 Language Processing Knock 2015 Chapitre 5 Analyse des dépendances (40-49)
100 Language Processing Knock 2020 Chapitre 4: Analyse morphologique
100 Language Processing Knock 2020 Chapitre 9: RNN, CNN
100 traitement du langage knock-76 (en utilisant scicit-learn): étiquetage