对 python 很陌生,无法理解为什么这不起作用。我有一个逐行存储在文本文件中的网址列表。我想将前 10 个存储在名为 bing 的数组/列表中,接下来的 10 个存储在名为 yahoo 的列表中,最后 10 个存储在名为 duckgo 的列表中。我正在使用 readlines 函数将文件中的数据读入每个数组。问题是没有任何内容被写入列表。计数正在增加,就像它应该的那样。另外,如果我完全删除循环并将整个文本文件读入一个列表,它就可以完美运行。这使我相信循环是导致问题的原因。我正在使用的代码如下。非常感谢一些反馈。
count=0;
#Open the file
fo=open("results.txt","r")
#read into each array
while(count<30):
if(count<10):
bing = fo.readlines()
count+=1
print bing
print count
elif(count>=10 and count<=19):
yahoo = fo.readlines()
count+=1
print count
elif(count>=20 and count<=29):
duckgo = fo.readlines()
count+=1
print count
print bing
print yahoo
print duckgo
fo.close
请您参考如下方法:
您正在使用 readlines 来读取文件。 readlines 一次读取所有 行,因此在第一次循环中,您耗尽了整个文件并将结果存储在 bing 中.然后,每次通过循环,您都会用下一个 readlines 的(空)结果覆盖 调用。所以你的列表最终都是空的。 bing、yahoo 或 duckgo
有很多方法可以解决这个问题。除其他事项外,您应该考虑使用 readline(无“s”)一次读取文件一行。或者更好的是,您可以逐行遍历文件,只需使用 for 循环即可:
for line in fo:
...
要保持当前代码的结构,您可以使用enumerate:
for line_number, line in enumerate(fo):
if condition(line_number):
...
但坦率地说,我认为您应该放弃当前的系统。一种更简单的方法是在没有循环的情况下使用 readlines,并对结果列表进行切片!
lines = fo.readlines()
bing = lines[0:10]
yahoo = lines[10:20]
duckgo = lines[20:30]
还有许多其他方法可以做到这一点,有些可能更好,但没有一种更简单!
