【发布时间】:2015-01-21 14:58:06
【问题描述】:
我想用 python 生成器从目录中打开一个文件——它是一个 csv 文件,目录中有大约 8 个 csv 文件。是的,我知道,我也可以使用 csv-lib,但我想知道是否可以在没有 lib 的情况下使用它。
到目前为止,这是我的代码:
vz = glob.glob("home/user/*csv")
data = [ open(i, 'r') for i in vz if "some_file_name" in i ]
之后我得到:
print data
==> [<open file '/home/user/some_file_name.csv', mode 'r' at 0x1eb78a0>]
for i in data.readlines():
print i
==> 'list' object has no attribute 'readlines'
有什么想法吗?
【问题讨论】:
-
您是否有理由使用
glob来查找文件,而不是直接命名它?为什么不只是open("home/user/some_file_name.csv", "r")?此外,很少需要在文件上调用readlines,因为它们已经是可迭代的。直接循环文件对象即可。 -
有一个原因:我使用
argv来运行带有两个参数的脚本。使用这些参数,我搜索正确的文件。类似于python script.py arg1 arg2,我正在搜索的文件名为filename_arg1_arg2,所以我使用if "filename_%s_%s" % (arg1, arg2) in vz: ..... -
你期望得到不止一场比赛吗?或者,您是否需要支持非精确匹配(例如,带有额外字符)?如果您真的只是在寻找名为
"filename_arg1_arg2.csv"的单个文件(其中arg1和arg2是您的命令行参数),只需使用open("filename_{}_{}.csv".format(arg1, arg2))或类似的%s代码您已经在您的测试。如果您知道整个名称,则无需遍历所有 CSV 文件。只处理一个文件可能会解决您遇到的问题(下面的答案可能已经正确描述)。 -
哇,这正是我要寻找的。谢谢! :)
标签: python python-2.7 csv glob