1
votes

Python 3.7: Comment puis-je lire un fichier entier avec readlines () à l'exception de la première ligne?

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 commentaires

avec open ('..') comme f: .. next (f); pour la ligne en f: ..


Vous pouvez ignorer la première ligne de fd en utilisant next (fd)


Pourriez-vous faire un exemple avec le formatage. Je ne comprends pas très bien ce que tu veux dire


3 Réponses :


3
votes

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)


0 commentaires

3
votes

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 >


5 commentaires

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



1
votes

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


1 commentaires

Cela pourrait aussi être une solution mais je pense que la méthode next () est plus simple! Merci de toute façon :)