Ceci est mon code
anak 1 aset 3 atas 1 bangun 1 bank 9 benar 1 bentuk 1
4 Réponses :
with open('file.txt', 'r') as source: lines = source.readlines() polTerm = [line.strip().split()[0] for line in lines] polFreq = [int(line.strip().split()[1]) for line in lines] The reason is that readlines() is an iterator, so the first call has already consumed it and it becomes empty and when you try to use that empty iterator the second time you find it empty.
Vous pouvez déduire les deux dernières lignes. Ils ne doivent pas nécessairement être dans le avec la déclaration code>. Cela fermerait le fichier un peu plus tôt
@gelonida je sais. Mais c'est une autre question, une question d'efficacité. Si vous répondez à deux questions en même temps, cela pourrait être un plus de complexité pour l'Asker. Je viens de modifier à peine son code afin qu'il puisse suivre et comprendre où il se trompait.
Vrai. Je pense simplement qu'il est plus facile de lire et de rendre plus claire que l'accès au fichier est effectué (que le fichier est uniquement lu une fois). Mais bien sûr, dans ce cas, ce n'est pas vraiment important.
with open('file.txt','r') as source: data=source.readlines() a1=[] a2=[] for line in data: x=line.split() a1.append(x[0]) a2.append(x[1])
Vous pouvez indemniser immédiatement après la ligne data = code>. Cela fermerait le fichier un peu plus tôt et réduirait le niveau d'indentation (à mon avis normalement une bonne idée)
C'est vrai, merci pour le conseil, il est très utile de l'efficacité.
@carcgenicate vous donne la réponse littérale.
Cependant, à mon avis, vous ne devriez tout simplement pas lire le fichier deux fois (sauf que le fichier est vraiment énorme et que toutes ses lignes ne correspondaient pas à la mémoire. P>
Si les fichiers ne sont pas si énormes, il n'est pas nécessaire de lire deux fois dans un fichier deux fois. Si c'est un peu énorme, lisez simplement les deux premières colonnes en mémoire. et séparez-les ensuite. P>
Qu'est-ce que je suggérerais: P>
with open('file.txt', 'r') as source: cols_1_and_2 = [line.strip().split(None, 2)[:2] for line in source.readlines()] polTerm = [cols[0] for cols in cols_1_and_2] polFreq = [int(cols[1]) for cols in cols_1_and_2] del cols_1_and_2 # this line is to free some memory if that would be an issue
comme carcigénicate dit, .readlines code> est un générateur qui renvoie une liste. Si vous ne économisez pas cette liste dans une variable, appelez un générateur une seconde fois ne rendra rien, car le générateur a été épuisé dans votre premier appel. Ce que vous voulez, c'est ce que vous voulez:
with open("file.txt","r") as inf:
# Now your lines list is saved in a global variable
# which can be used outside with open().
# The .readlines generator is exhausted and won't return
# anything.
raw = inf.readlines()
polTerm = [line.strip().split()[0] for line in raw]
polFreq = [int(line.strip().split()[1]) for line in raw]
Est-ce que cela répond à votre question? Utilisation de "Readlines ()" deux fois de suite
Merci pour votre réponse! Une autre question, y a-t-il une meilleure façon de le faire à côté de cela?
merci!, je viens d'ajouter
lignes = source.readlines () code> avant
polterm = [ligne.strip (). Split () [0] pour la ligne dans la source.Readlines ()] code> et modifier tout
source.readlines code> à
lignes code>
Vous avez 4 réponses, qui semblent résoudre votre problème. Vous avez toujours besoin d'aide ou de conseils sur certains détails sur ces réponses?