Skip to main content
 首页 » 编程设计

python之如何有选择地将文件中的行放入列表

2025年05月04日23kerrycode

我正在尝试获取格式如下的文件:

# Comments 
# More comments 
 
1,foo,bar,1 
1,foo,bar,2 
21,foo,bar,8 
 
end_of_file 

并将其处理成如下列表:

listing = [[1,'foo','bar',1], [1,'foo','bar',2], [21,'foo','bar',8]] 

目前,我正在运行类似于:

listing = []  
with open('foo_file.cfg','r') as f: 
    for line in f: 
        if line[0].isDigit: 
            listing.append(line)   #  i've also tried listing.append([line]) 

显然,我最终会得到:

[['1,foo,bar,1'],['1,foo,bar,2'],['21,foo,bar,8']] 

我知道我可以用逗号分隔 line,重建一个新列表,然后将列表附加到 listing。 如果是的话,我绝对愿意这样做正确的方法,但我认为它们可能更清洁。我知道 csv 模块会将整个文件读入正确的格式,但我不确定它将如何选择性地删除某些数据,例如评论。

请您参考如下方法:

这是 csv 模块的一种方式,它避免了明确说明一些重复性任务(逗号分隔符、换行符等)。

from io import StringIO 
import csv 
 
mystr = StringIO("""1,foo,bar,1 
1,foo,bar,2 
21,foo,bar,8""") 
 
res = [] 
 
# replace mystr with open('file.csv', 'r') 
with mystr as f: 
    reader = filter(None, csv.reader(f))  # ignore empty lines 
    for line in reader: 
        if line[0].isdigit(): 
            res.append([int(line[0]), line[1], line[2], int(line[3])]) 
 
print(res) 
 
[[1, 'foo', 'bar', 1], 
 [1, 'foo', 'bar', 2], 
 [21, 'foo', 'bar', 8]]