簡體   English   中英

使用python復制壓縮文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM