Je suis en train de coder un programme de vocabulaire dans lequel vous pouvez saisir autant de mots que vous le souhaitez avec leur traduction dans une autre langue. Ces mots sont enregistrés dans un fichier .txt. Ensuite, vous pouvez ouvrir ce fichier dans la console Python et le programme vous demandera un mot et vous devrez entrer la traduction dans l'autre langue. Mais dans la première ligne, j'ai les deux langues et plus tard je les ai divisées et je les utilise à nouveau. Mais quand le programme demande le vocabulaire j'utilise readlines () mais ensuite le programme vous demande aussi la traduction de la langue (première ligne) par exemple:
with open(name + ".txt", "r") as file: for line in file.readlines(): word_1, word_2 = line.split(" - ") newLanguage_1.append(word_1) newLanguage_2.append(word_2)
mais je ne veux pas de ça, Je veux que le programme lit toutes les lignes de ce fichier à l'exception de la première ligne. Et je ne connais pas le nombre de lignes dans ce fichier, car l'utilisateur entre autant de mots qu'il le souhaite.
Merci beaucoup pour votre aide! Et voici mon code où je lis les lignes:
German Translation:
3 Réponses :
Sautez simplement la première ligne, l'objet fichier file
est déjà un itérateur donnant les lignes:
with open(f"{name}.txt", "r") as file: next(file) newLanguage_1, newLanguage_2 = zip(*(l.split(" - ") for l in file))
En guise de compréhension:
with open(f"{name}.txt", "r") as file: next(file) for line in file: word_1, word_2 = line.split(" - ") newLanguage_1.append(word_1) newLanguage_2.append(word_2)
Vous pouvez sauter la première ligne en appelant next
sur le fd
(puisque l'objet fichier est un itérateur) comme,
with open("{}.txt".format(name), "r") as file: next(file) # skip the first line in the file for line in file: word_1, _ , word_2 = line.strip().partition(" - ") # use str.partition for better string split newLanguage_1.append(word_1) newLanguage_2.append(word_2)
p >
Oui, également lorsque vous avez besoin de fractionner
certains str
, utilisez str.partition
au lieu de str.split
, donc vous pouvez toujours vous attendre à 3 articles au lieu d'un nombre inconnu d'articles :)
Vous voulez dire que je peux avoir un nombre défini d'articles?
Non, vous obtiendrez toujours 3 éléments avec str.partition
, vous pouvez donc faire comme word1, _, word2 = 'foo bar'.partition (' ')
, et vous obtiendrez exactement foo
et bar
dans word
et word2
respectivement
Et je saute juste la première ligne avec next () non? Et il lit plus tard toutes les autres lignes, quel que soit le nombre de lignes?
Oui, la boucle for épuise le fd
en lisant ligne par ligne jusqu'à EOF
Vous pouvez ajouter un compteur.
with open(name + ".txt", "r") as file: i=0 for line in file.readlines(): if i==0: pass else: word_1, word_2 = line.split(" - ") newLanguage_1.append(word_1) newLanguage_2.append(word_2) i+=1
Cela pourrait aussi être une solution mais je pense que la méthode next () est plus simple! Merci de toute façon :)
avec open ('..') comme f: .. next (f); pour la ligne en f: ..
Vous pouvez ignorer la première ligne de
fd
en utilisantnext (fd)
Pourriez-vous faire un exemple avec le formatage. Je ne comprends pas très bien ce que tu veux dire