En me promenant sur le net, je suis soudainement tombé sur un site appelé "Language Processing 100 Knock 2020". Alors que je voulais toucher au traitement du langage naturel, la programmation était un nouveau venu pour un programmeur qui faisait un petit concours. Je suis un peu intéressé, alors je vais essayer. Au moment de la rédaction de cet article, seule la moitié du total est terminée, mais je vais l'écrire dans un sens commémoratif. J'arrêterai si mon cœur se brise. Veuillez deviner s'il n'y a pas d'article précédent.
J'essaierai d'écrire un commentaire autant que possible, mais si vous êtes intéressé, je vous recommande de le vérifier.
Jusqu'à présent avec Dernière fois.
La citation suivante est tirée de ici
popular-names.txt est un fichier qui stocke le «nom», le «sexe», le «nombre de personnes» et «l'année» d'un bébé né aux États-Unis dans un format délimité par des tabulations. Créez un programme qui effectue le traitement suivant et exécutez popular-names.txt en tant que fichier d'entrée. De plus, exécutez le même processus avec une commande UNIX et vérifiez le résultat de l'exécution du programme.
Ce n'est pas un problème de faire la même chose avec les commandes UNIX. (Est-ce que ça va)
Comptez le nombre de lignes. Utilisez la commande wc pour confirmation.
10.py
with open("popular-names.txt") as f:
print(len(f.readlines()))
Terminal
2780
with open () as ~
ne vous oblige pas à utiliser close ()
, contrairement à l'utilisation de ʻopen () seul. Une fois le retrait terminé, il se fermera sans autorisation.
readlines ()` est une fonction qui renvoie le fichier entier sous forme de liste séparée par des sauts de ligne.
Remplacez chaque caractère de tabulation par un caractère d'espace. Utilisez la commande sed, la commande tr ou la commande expand pour confirmation.
11.py
from functools import reduce
with open("popular-names.txt") as f:
print(reduce(lambda a, b: (a+b).replace("\t", " "), f.readlines()))
Terminal
Mary F 7065 1880
Anna F 2604 1880
Emma F 2003 1880
Elizabeth F 1939 1880
・
・
Code golf est toujours en cours ... (une perte d'effort). Le résultat est si long que ce n'est que le début.
reduction ()
est une fonction d'ordre supérieur comme map ()
.
Vous pouvez adapter la fonction à quelque chose d'itérable. C'est une fonction pratique pour trouver la somme.
12.py
with open("popular-names.txt") as a,\
open("col1.txt", mode="w") as b,\
open("col2.txt", mode="w") as c:
for l in a.readlines():
x, y, *z = l.split("\t")
b.write(x+"\n")
c.write(y+"\n")
col1.txt
Mary
Anna
Emma
Elizabeth
・
・
col2.txt
F
F
F
F
・
・
Vous pouvez connecter plusieurs avec open ()
. Puisqu'il semblait long horizontalement, j'ai utilisé \
pour casser la ligne.
Pour x, y, * z =
, la première valeur de retour est dans x
, la seconde dans y
et le reste dans z
.
Tout ce que vous avez à faire est d'écrire ce dont vous avez besoin dans le fichier.
Combinez col1.txt et col2.txt créés dans> 12 pour créer un fichier texte dans lequel les première et deuxième colonnes du fichier d'origine sont séparées par des tabulations. Utilisez la commande coller pour confirmation.
13.py
with open("marge.txt", mode="w") as a,\
open("col1.txt") as b,\
open("col2.txt") as c:
for x, y in zip(b.readlines(), c.readlines()):
a.write(x[:-1]+" "+y)
marge.txt
Mary F
Anna F
Emma F
Elizabeth F
・
・
zip ()
est une fonction qui peut obtenir les éléments de plusieurs listes à la fois.
Les deux éléments ont un saut de ligne à la fin, donc «x» supprime le dernier caractère.
(Je n'écris plus ...)
Recevoir le nombre naturel N au moyen d'un argument de ligne de commande et n'afficher que les N premières lignes de l'entrée. Utilisez la commande head pour confirmation.
14.py
import sys
from functools import reduce
with open(sys.argv[2]) as f:
S = f.readlines()
print(reduce(lambda a, b: a+b, S[:min(len(S), int(sys.argv[1]))]),
end="")
Non ... réduire ()
est pratique ...
sys.argv
contient la chaîne saisie sur la ligne de commande, y compris" filename.py ".
Il vous permet d'utiliser des arguments de ligne de commande.
Recevoir le nombre naturel N au moyen d'un argument de ligne de commande et n'afficher que les N dernières lignes de l'entrée. Utilisez la commande tail pour confirmation.
15.py
import sys
from functools import reduce
with open(sys.argv[2]) as f:
S = f.readlines()
print(reduce(lambda a, b: a+b, S[max(0, len(S)-int(sys.argv[1])):]),
end="")
C'est une rediffusion de ce qui était la 14e question.
J'utilise max ()
pour éviter le dépassement, car j'ai du mal à recevoir plus de demandes que le nombre de lignes dans le fichier.
Cette fois, je n'avais pas beaucoup de matériel (pas intéressant), mais comment était-ce? Le commentaire a probablement augmenté. Plus le est attaché, plus il est devenu un manuel, mais j'espère que ce sera l'une des réponses à 100 coups de langue. Il y a beaucoup d'articles à ce sujet, alors jetez un œil si vous êtes intéressé.
Rendez-vous dans le prochain article, Chapitre 2, Partie 2. Si vous avez des idées pour raccourcir le code, veuillez commenter.
Eh bien.
Recommended Posts