【发布时间】:2014-08-25 05:18:24
【问题描述】:
这与 csv writer not closing file 相似或相同,但我不能 100% 确定为什么我的行为不同。
def LoadCSV:
with open('test.csv', 'r') as csvfile:
targetReader = csv.reader(csvfile, delimiter=',')
for row in targetReader:
...
然后finally在函数中
csvfile.close()
这会以与脚本相同的方向打开 test.csv 文件。期望的行为是当脚本完成对函数中的行所做的事情时,它会重命名要测试的工作表。[timestamp] 将其归档并监视目录以获取新工作表。
后面的代码;
os.rename('test.csv', "test." + time.strftime("%x") )
由于进程仍在使用文件而导致无法重命名文件的错误。完成后如何关闭此文件? csvfile.close() 不会引发异常,如果我在交互模式下单步执行我的代码,我可以看到 csvfile 是一个“关闭的文件对象”。那是什么?一个打开的文件肯定是一个对象,但一个关闭的不是,我如何让我的代码忘记它甚至存在,以便我可以对文件执行 IO?
【问题讨论】:
-
with块应在文件超出范围时自动关闭文件。尝试在with块的范围之外重命名它 -
edit:它在with块之外但在函数内部,所以它在with之外。
-
os.rename('test.csv', "test." + time.strftime("%x") )不依赖于csvfile的定义吗? -
重命名文件不需要文件句柄,只需要文件名。
os.rename('test.csv'....不需要任何定义:) -
这不是有效的 Python 代码:
def LoadCSV:,所以请粘贴您正在使用的实际代码,而不是让我们猜测发生了什么。