python - 在 Python 中关闭 CSV 文件

标签 python csv

这与 csv writer not closing file 相似或相同但我不能 100% 确定为什么我的行为有所不同。

def LoadCSV:
    with open('test.csv', 'r') as csvfile:
        targetReader = csv.reader(csvfile, delimiter=',')
        for row in targetReader:
            ...

最后在函数中

csvfile.close()

这将按照与脚本相同的方向打开 test.csv 文件。所需的行为是当脚本对函数中的行执行完操作后,它将工作表重命名为 test.[timestamp] 以将其存档并监视新工作表到达的目录。

下面是代码;

os.rename('test.csv', "test." + time.strftime("%x") )

给出错误,指出该文件无法重命名,因为进程仍在使用该文件。完成后如何关闭该文件? csvfile.close() 不会引发异常,如果我以交互模式单步执行代码,我可以看到 csvfile 是一个“关闭的文件对象”。那到底是什么?当然,打开的文件是一个对象,但关闭的文件不是,我如何让我的代码忘记它的存在,以便我可以对文件进行 IO?

最佳答案

不是为了积分。

代码无论如何都无效,因为您的函数名称错误。如果这不是故意的,最好对其进行编辑或生成代码的伪副本,而不是让我们猜测问题是什么。

迭代一下代码的问题:

  1. def LoadCSV 无效。 def LoadCSV() 是。证明在下面的截图中。请注意缺少 () 如何显示语法错误标记。

enter image description here

  • 修复了上面的 (1),您的下一个问题是使用 csvfile.close()。如果代码写得正确,一旦代码超出了with的范围,文件就会自动关闭。即使代码的重命名部分位于函数内部,也不应该造成任何问题。

  • 最后的警告 - 使用格式字符串 %x 将生成类似 08/25/14 的日期字符串,具体取决于区域设置。显然,这是错误的,因为 Windows 中的文件名中的 / 无效(尝试使用此命令手动重命名文件)。最好非常明确,只需使用 %m%d%y 即可。

  • 最后,看看我这边的运行代码。如果您的代码不是这样构造的,那么可能会出现我们无法猜测的其他错误。

    enter image description here

    运行后结果如下:

    enter image description here

    引用代码:

    import csv
    import os
    import time
    
    def LoadCSV():
        with open("test.csv", "r") as csvfile:
            targetReader = csv.reader(csvfile, delimiter=",")
            for row in targetReader:
                print row
        new_name = "test.%s.csv" % time.strftime("%m%d%y")
        print new_name
        os.rename("test.csv", new_name)
    
    LoadCSV()
    

    请注意,在我这边,没有任何东西监视我的文件。防病毒软件已打开,并且显然没有启用多线程。检查您的其他脚本之一是否同时监视此文件的更改。最好不要查看文件,而是将文件作为重命名后的参数发送给另一个函数,因为这可能是它“被使用”的原因。一方面,这在我这边未经测试,可能更好地使用新名称复制文件而不是重命名它。

    希望这有帮助。

    关于python - 在 Python 中关闭 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25479416/

    相关文章:

    python list __iter__ 方法在每个循环中调用?

    python - 使用python从带有滚动的网页中抓取数据

    python - 如何在Python中同时检查多行多列中的多个并发事件?

    python - SonarQube - 是否有关于如何解决覆盖问题的基本示例/解释?

    python - 我继承的类 MenuBar(tk.Menu) 不显示菜单栏

    python - Django、MySQL 和正则表达式 : not supporting re syntax?

    mysql - 来自 MySQL 数据库读取器的 Powershell Export-CSV 在导出过程中失败

    python - 用今天的日期替换 CSV 文件中的 'NULL' 值 - Python

    javascript - 如何在包含异步函数的循环之后完成某件事

    powershell - 使用Powershell根据关键字删除标题行