我正在尝试获取格式如下的文件:
# 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]]
