【问题标题】:writer.writerow not work for writing multiple CSV in for loopwriter.writerow 不适用于在 for 循环中写入多个 CSV
【发布时间】:2017-09-19 21:50:47
【问题描述】:

请看下面的伪代码:

def main():
    queries = ['A','B','C']
    for query in queries:
        filename = query + '.csv'
        writer = csv.writer(open(filename, 'wt', encoding = 'utf-8'))
        ...
        FUNCTION (query)

def FUNCTION(query):
    ...
    writer.writerow(XXX)

我想写入多个csv文件,所以我使用for loop生成不同的文件名,然后在另一个def()中写入文件

但是,这不起作用,文件将为空。

如果我尝试摆脱使用main() 或停止使用for loop

writer = csv.writer(open(filename, 'wt', encoding = 'utf-8'))
        ...
FUNCTION (query)
def FUNCTION(query):
       ...
    writer.writerow(XXX)

它会起作用的。

我不知道为什么?与for loopmain() 相关的任何内容?

【问题讨论】:

    标签: python function main writer


    【解决方案1】:

    我认为可能的原因是您没有关闭文件指针。您可以像这样使用上下文管理器:

    with open(filename, 'wt', encoding = 'utf-8') as f:
        writer = csv.writer(f)
        ...
        FUNCTION (query)
    

    这将帮助您自动关闭文件。

    【讨论】:

      【解决方案2】:

      一个简单的解决方法是将文件句柄而不是名称传递给 FUNCTION。由于文件已在 main 中打开,您不需要/想要子例程中的名称,只需文件句柄,因此将调用更改为 FUNCTION(writer) 并将定义更改为

      def FUNCTION(writer):

      并使用writer.writerow(xxx) 在子例程中任何需要流式输出的地方。

      注意:在您的示例中,您将文件指针的名称从 writer 更改为 write

      【讨论】:

      • 像魔术一样工作!这是我学习传递文件句柄的酷课!
      猜你喜欢
      • 2016-09-30
      • 1970-01-01
      • 2018-01-19
      • 2023-03-25
      • 2021-07-06
      • 2010-09-19
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      相关资源
      最近更新 更多