2013-11-24 33 views
0

我使用Beautiful Soup生成了一个名为MasterList的Python列表,并且我想将此列表保存为文本或.csv文件,然后导入到其他Python抓取脚本中作为一个列表,我可以迭代并喂入美丽的汤。我不想使用pickle或将生成MaterList的函数导入到我的其他脚本文件中,因为生成MasterList需要很长时间,所以我只想生成一次并重复使用它。所以我用下面导入CSV文件为列表到Python的问题

import csv 

ListCsv=csv.writer(open("MasterList.csv","w")) 
ListCsv.writerow(MasterList) 

保存MasterList和文件在我的目录中填入正确信息的.csv文件显示出来。然而,当我尝试运行代码

test = csv.reader(open("MasterList.csv","r")) 
test = list(test) 
print(test) 

我没有得到任何错误,列表test是空的。即,print(test)命令显示[]。我浏览了很多论坛,并尝试导入csv文件的不同版本以保存为列表,但没有任何结果。根据我使用的语法和方法,我可以获取并清空列表或print(test)显示<_csv.reader object at 0x1014c78a0>

我应该补充说我在Mac OSX 10.7.5上使用Python版本2.7.3,并且已经安装了最新版本的csv模块。任何帮助将不胜感激。

+1

使用'with'语句处理文件,或者明确地关闭文件对象。 –

回答

1

您应该明确关闭文件对象,或者更好地使用with语句来处理文件,因为它会自动为您关闭该文件,否则实际写入该文件的数据可能不会被刷新到该文件。

演示:

>>> f = open('abc.csv', 'w') 
>>> writer = csv.writer(f) 
>>> writer.writerow(range(10)) 
>>> list(csv.reader(open("abc.csv"))) #empty result, nothing flushed to file yet. 
[] 
>>> f.close()    #close the file object, now the data is flushed to file 
>>> list(csv.reader(open("abc.csv"))) 
[['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']] 

更好地利用with声明:

with open('abc.csv', 'w') as f: 
    writer = csv.writer(f) 
    writer.writerow(range(10)) 
with open('abc.csv') as f: 
    reader = csv.reader(f) 
    print list(reader) 
+0

非常感谢!两个后续问题:如何将'list(reader)'保存为变量?例如,如果我定义'NewList = list(reader)',我会在关闭的文件中出现错误'ValueError:I/O操作'。第二个问题,'list(reader)'似乎在列表的开头和结尾添加了额外的'['和']',例如, '[[A,B,C]]'。你如何使这个列表只是'[a,b,c]'? –

+0

@MarkClements'list()'将读取列表格式列表中的所有行,因此一次只读一行。 '在读者中排成行:...'。所有与该文件对象有关的操作应该在语句块内部完成,否则你将在'关闭的文件'上执行I/O操作。 –