【问题标题】:python import csv functionpython导入csv函数
【发布时间】:2017-11-21 14:37:25
【问题描述】:

尝试学习 python 并开始尝试复制一些我用于日常生产力任务的 powershell 脚本。我想问你们为什么这个方法在python中不起作用:

def csvIn(path):
    import csv
    with open(path) as myFile:
        csv = csv.reader(myFile)
    return csv

a = csvIn('C:/Users/xxxxxx/Desktop/DL/add.csv')

for row in a:
    print(row)

我正在尝试编写一个函数来导入 CSV 文件并将其输出放入列表(数组)中。如果我在函数调用之外调用导入 csv,那么整个事情都会起作用。当我从函数内部尝试时,我得到这个:“ValueError: I/O operation on closed file.”

【问题讨论】:

  • 可能是因为您将csv 作为变量和模块?
  • 这不是为什么,尝试将第二个 csv 名称重命名为 csv2 或其他名称,您仍然会遇到同样的错误。

标签: python list function return-value


【解决方案1】:

因为with是一个上下文管理器,所以当程序到达返回行时,文件已经被关闭了。

建设性的建议是把它合二为一:

import csv
PATH = 'C:/Users/xxxxxx/Desktop/DL/add.csv'
with open(PATH) as myFile:
   h_csv = csv.reader(myFile)
   for row in h_csv:
      print(row)

编辑:根据要求,这是一个作为函数但没有 with 的示例:

import csv

def csvIn(path):
    myFile = open(path)
    h_csv = csv.reader(myFile)
    return h_csv

a = csvIn('C:/Users/xxxxxx/Desktop/DL/add.csv')

for row in a:
    print(row)

【讨论】:

  • 完全同意。正如我上面所说,当我这样做时,一切都很好。只是想知道如何使用 python 中的函数来完成它。有没有不使用“with”的替代方法来完成它?
  • 当然只使用没有 with 的 open 内置函数,请参阅我的编辑。不确定您是否真的想要一个返回文件对象句柄的函数,因为它会使它在外部范围内保持打开状态。让它返回一个迭代器可能会更好——这是两全其美的方法——把它当作一个列表来对待,但不要使用太多内存。
  • 确实有效。赞成并标记为答案。谢谢。
猜你喜欢
  • 2014-04-10
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 2016-07-02
相关资源
最近更新 更多