[英]Copying zipped file using python
我需要將文件從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,沒有幫助。 任何人都不知道會有什么問題嗎?
提前致謝!
Ofek。
您可能需要在復制zip_file
之前將其close
; copyfile
將單獨打開文件,並且如果未將數據刷新到磁盤,它將復制一個不完整的文件(尤其是糟糕的文件,因為您可能會省略解釋內容所需的zip文件元數據)。
zipfile
文檔明確聲明:
您必須在退出程序之前調用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
文件,你可能想先復制壓縮,那么.done
,所以存在.done
表示完整的zip文件已被復制,而不是“它即將被復制,但是如果您閱讀得太快,則可能不完整”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.