【问题标题】:Open file with generator - Python使用生成器打开文件 - Python
【发布时间】: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" 的单个文件(其中arg1arg2 是您的命令行参数),只需使用open("filename_{}_{}.csv".format(arg1, arg2)) 或类似的%s 代码您已经在您的测试。如果您知道整个名称,则无需遍历所有 CSV 文件。只处理一个文件可能会解决您遇到的问题(下面的答案可能已经正确描述)。
  • 哇,这正是我要寻找的。谢谢! :)

标签: python python-2.7 csv glob


【解决方案1】:

似乎data 是一个包含一个元素的列表,即您要读取的文件对象。这应该有效:

for i in data[0].readlines():
    print i

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-13
    • 2023-02-18
    • 1970-01-01
    • 2013-11-05
    • 2017-07-01
    • 2015-01-29
    • 2014-01-07
    • 1970-01-01
    相关资源
    最近更新 更多