Skip to main content
 首页 » 编程设计

python之从文本文件读入 python 列表

2025年05月04日13Leo_wl

对 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] 

还有许多其他方法可以做到这一点,有些可能更好,但没有一种更简单!