我需要将文件从我的NAS复制到我的本地文件夹,压缩然后将其复制到别处。这是我的代码:
from shutil import copyfile
import zipfile
def make_done_file(user, filename):
copyfile(network_location+filename+'.csv', test_location+filename+'.csv')
zip_file = zipfile.ZipFile(test_location+filename+'.csv.zip', 'w')
zip_file.write(test_location+filename+'.csv', compress_type= None, arcname = filename+'.csv')
copyfile(test_location+filename+'.done' , final_location+filename+'.done')
copyfile(test_location+filename+'.csv.zip' , final_location+filename+'.csv.zip')
这就是事情..
我可以在创建后从zip中打开我的csv。 我在复制文件后无法打开csv。
我目前没有想法。试过copy2,没有帮助。任何人都知道什么可能出错?
提前感谢!
地平线。
答案 0 :(得分:0)
在复制之前,您可能需要close
zip_file
; copyfile
将单独打开文件,如果数据没有刷新到磁盘,它将复制一个不完整的文件(特别糟糕,因为你可能会省略解释内容所需的zip文件元数据。)
The zipfile
docs明确说明:
您必须在退出程序前调用close(),否则不会写入基本记录。
由于您使用的是Python 3,因此可以使用上下文管理(close
语句)使with
调用隐式且有保证(即使存在异常),从而进一步简化在退出块时创建一个自动关闭zip文件的块。
将您的代码更改为:
def make_done_file(user, filename):
copyfile(network_location+filename+'.csv', test_location+filename+'.csv')
with zipfile.ZipFile(test_location+filename+'.csv.zip', 'w') as zip_file:
zip_file.write(test_location+filename+'.csv', compress_type=None, arcname=filename+'.csv')
copyfile(test_location+filename+'.done', final_location+filename+'.done')
copyfile(test_location+filename+'.csv.zip', final_location+filename+'.csv.zip')
此外,如果您还有其他进程要查找.done
文件,您可能需要先复制zip,然后再复制.done
,以便{{1}存在表示已经复制了一个完整的zip文件,而不是"它将被复制,但是如果你读得太快,它可能就不完整了#34;。