『壹』 請教一個《簡明python教程》裡面文件zip備份的問題
本人剛好也看到這里,zip命令是unix和linux環境的命令吧,換下rar命令就可以了 ,我是這樣實現的。
解壓縮
importzipfile
importos
defun_zip(file_name):
"""unzipzipfile"""
zip_file=zipfile.ZipFile(file_name)
ifos.path.isdir(file_name+"_files"):
pass
else:
os.mkdir(file_name+"_files")
fornamesinzip_file.namelist():
zip_file.extract(names,file_name+"_files/")
zip_file.close()
打包
zipfile.ZipFile('xxx.zip','a/w/x').write('xxx.txt')
'w'以截斷並寫入新文件'a'以附加到現有文件,或'x'以專門創建和寫入新文件。
『叄』 python 中如何壓縮文件,並指定文件的壓縮之後的大小。
這個簡單啊。你先壓縮成一個ZIP文件。比如 example.zip
然後用python將它分割成,5個文件。e1,e2,e3,e4,e5
郵件發出去後,對方收到郵件,另存附件,然後在目錄下運行
e1+e2+e3+e4+e5 example.zip
此時windows就將依次將5個文件復制到同一個文件里去。
『肆』 怎麼壓縮用python寫的游戲的文件大小或者用什麼開發庫
你可以嘗試以下方法:
建立虛擬環境,減少Python打包額外的第三方庫
使用upx和pyinstaller進行壓縮
使用upx和nuitka進行壓縮
這幾種方法網上可以找到很多教程,都能夠在一定程度上減小打包出來的文件大小,但是因為Python的解釋型語言,除了使用nuitka編譯成exe以外,其它的壓縮方法作用一般不大,但是使用nuitka編譯後的文件也會有較大的體積。
『伍』 python怎樣壓縮和解壓縮ZIP文件(轉)
榭梢越�姓庋�牟僮鰲2還� Python 中的 zipfile 模塊不能處理多卷的情況,不過這種情況並不多見,因此在通常情況下已經足夠使用了。下面我只是對一些基本的 zipfile 操作進行了記錄,足以應付大部分的情況了。zipfile 模塊可以讓你打開或寫入一個 zip 文件。比如:import zipfilez = zipfile.ZipFile('zipfilename', mode='r') 這樣就打開了一個 zip 文件,如果mode為'w'或'a'則表示要寫入一個 zip 文件。如果是寫入,則還可以跟上第三個參數: compression=zipfile.ZIP_DEFLATED 或 compression=zipfile.ZIP_STORED ZIP_DEFLATED是壓縮標志,如果使用它需要編譯了zlib模塊。而後一個只是用zip進行打包,並不壓縮。在打開了zip文件之後就可以根據需要是讀出zip文件的內容還是將內容保存到 zip 文件中。讀出zip中的內容很簡單,zipfile 對象提供了一個read(name)的方法。name為 zip文件中的一個文件入口,執行完成之後,將返回讀出的內容,你把它保存到想到的文件中即可。寫入zip文件有兩種方式,一種是直接寫入一個已經存在的文件,另一種是寫入一個字元串。對 於第一種使用 zipfile 對象的 write(filename, arcname, compress_type),後兩個參數是可以忽略的。第一個參數是文件名,第二個參數是表示在 zip 文件中的名字,如果沒有給出,表示使用與filename一樣的名字。compress_type是壓縮標志,它可以覆蓋創建 zipfile 時的參數。第二種是使用 zipfile 對象的 writestr(zinfo_or_arcname, bytes),第一個參數是zipinfo 對象或寫到壓縮文件中的壓縮名,第二個參數是字元串。使用這個方法可以動態的組織文件的內容。類源碼為:[python] view plain# coding:cp936 # Zfile.py # xxteach.com import zipfile import os.path import os class ZFile(object): def __init__(self, filename, mode='r', basedir=''): self.filename = filename self.mode = mode if self.mode in ('w', 'a'): self.zfile = zipfile.ZipFile(filename, self.mode, compression=zipfile.ZIP_DEFLATED) else: self.zfile = zipfile.ZipFile(filename, self.mode) self.basedir = basedir if not self.basedir: self.basedir = os.path.dirname(filename) def addfile(self, path, arcname=None): path = path.replace('//', '/') if not arcname: if path.startswith(self.basedir): arcname = path[len(self.basedir):] else: arcname = '' self.zfile.write(path, arcname) def addfiles(self, paths): for path in paths: if isinstance(path, tuple): self.addfile(*path) else: self.addfile(path) def close(self): self.zfile.close() def extract_to(self, path): for p in self.zfile.namelist(): self.extract(p, path) def extract(self, filename, path): if not filename.endswith('/'): f = os.path.join(path, filename) dir = os.path.dirname(f) if not os.path.exists(dir): os.makedirs(dir) file(f, 'wb').write(self.zfile.read(filename)) def create(zfile, files): z = ZFile(zfile, 'w') z.addfiles(files) z.close() def extract(zfile, path): z = ZFile(zfile) z.extract_to(path) z.close()
『陸』 python怎樣壓縮和解壓縮ZIP文件
1、python使用zipfile模塊壓縮和解壓ZIP文件
2、讀取zip文件
首先,通過zipfile模塊打開指定zip文件,如:
zpfd = zipfile.ZipFile(path, mode='r')
對於zipfile,其標志與open所用的打開文件標志有所不同,不能識別 'rb'。
然後,讀取zip文件中的內容,zipfile對象提供一個read(name)的方法,name為zip文件中的一個文件入口,執行完成之後,將返回讀出的內容,如:
for filename in zpfd.namelist():
tmpcont = zpfd.read(filename)
print 'len(tmpcont)', 'tmpcont'
需要注意的是,讀取zip文件時,只能讀取內容
3、寫入zip文件
首先,需要zipfile模塊寫打開或創建zip文件,如:
zpfd = zipfile.ZipFile(path, mode='w')
寫打開是標志可以為'w'或'a'('a'表示寫入一個zip文件), 或者傳入第三個參數cmopression壓縮標志
compression=zipfile.ZIP_DEFLATED 需要導入zlib模塊
compression=zipfile.ZIP_STORED則表示只對文件進行打包,並不壓縮
寫入有兩種方式,一種是直接寫入一個已經存在的文件,可使用zipfile對象中write(filename, arcname, compress_type)第一個參數為文件名,第二個參數指寫入zip文件中的文件名,默認與filename一致,第三個參數壓縮標志可以覆蓋打開zipfile時的使用參數;另一種是寫入一個字元串,可使用zipfile對象中的writestr(zinfo_or_arcname, bytes),第一個參數是zipinfo對象或寫到zip文件中的壓縮名,第二個參數是待寫入的字元串
4、最後,對於打開的zipfile對象需要進行關閉,從而使得寫入內容真正寫入磁碟,即:
zpfd.close()
『柒』 有關python 壓縮備份的問題
問題:我沒有在Python2.7下測試你的代碼,只是在Python3.2下測試的,因為我沒裝2.7版本的。不過,沒關系,其字元串用法及其意義是一樣的。我測試了一下,應該是其中的一句出錯了:target_dir=r'D:\bak\\' 。這句話在語法上沒有問題,也是要這么寫,但是target_dir的值就有可能不是我們所想的了,你可以使用print輸出一下target_dir的值,我在3.2下輸入的結果是:D:\bak\\。這一看就不對,多了一個反斜杠(\),導致在Windows下路徑出錯。
解決:把target_dir=r'D:\bak\\'後面再加上一句:target_dir=target_dir[0:-1]。這樣一來,就把最後的反斜杠給清除了,路徑就對了!應該沒問題了,我直接看的代碼,發現這句有問題,就對這句單獨測試的,其它的代碼沒有測試,不過,看語法應該沒問題了!
另外:你使用的後綴名是.rar,壓縮命令是rar程序,所以備份的文件名應該是rar文件;在Windows下,我沒用過rar命令行壓縮命令,也不太清楚,推測應該是rar文件。至於你問的文件夾可以不可以備份和文件夾下的目錄可以不可以備份,這不是 Python所管的事(至少在你這段代碼中),至於能不能,要看你這個Windows下的rar程序支持不支持了;如果支持,就可以,如果不支持,就不可以。原因:os.system()函數類似於C/C++中的system(),它會把傳遞給它的參數交給系統環境(也就是運行Python程序操作系統)來執行,這和我們在相應的系統環境中的命令行下直接命令是一樣的,區別就是我們這個使用的是腳本,可以保存代碼以自動(例行性服務)或手動地、定期地備份!
『捌』 用Python備份並壓縮文件,幫忙看代碼哪裡錯了
你的命令行應該在cmd下也無法執行,不信你試試。這就是你不能正確執行的原因
『玖』 求Python的tar壓縮命令
rar_command = 'winrar a -r %s %s' % (target,source)
改為
rar_command = 'tar -zcvf %s %s' % (target,source)
『拾』 下載python然後有一堆文件要解壓
python一堆文件解壓方法如下。
壓縮包解壓要用的是zipfile這個包。
zip_file = zipfile.ZipFile(r'D:數據源XX_%s.zip'%yday)
zip_list = zip_file.namelist() # 壓縮文件清單,可以直接看到壓縮包內的各個文件的明細
for f in zip_list: # 遍歷這些文件,逐個解壓出來,
zip_file.extract(f,r'D:數據源')
zip_file.close() # 不能少!
print('昨日日誌解壓完成,請在文件夾中驗收!') # 當然我是不需要查收的(*/ω\*)
這里的解壓操作實際就相當於滑鼠右鍵「解壓到當前文件夾」的效果。
完成解壓後運行.close()是個比較好的習慣,否則可能會導致包括但不限於:
文件會一直被佔用著,可能無法重新打開;
在進程結束之前文件都刪不掉;
文件內容不能即時 flush 到磁碟直到進程結束;
到此,整個流程在無需打開瀏覽器和文件夾的情況下便自動完成了。
為了方便日常運行代碼,這里把上面的兩個流程包裝成一個函數,下載解壓
#下載昨日日誌
def download_XXlog():
yday = (date.today()+timedelta(days=-1)).strftime('%Y%m%d') # 獲取昨日日期
r = requests.get('http://XXXXXXXX/XX_%s.zip'%yday) # 獲取以日期命名的壓縮包信息
with open(r'D:數據源XX_%s.zip'%yday,'wb') as code: # 將壓縮包內容寫入到 "D:數據源" 下,並按日期命名
code.write(r.content)
print('昨日XX日誌下載完成。')
zip_file = zipfile.ZipFile(r'D:數據源XX_%s.zip'%yday)
zip_list = zip_file.namelist() # 壓縮文件清單,可以直接看到壓縮包內的各個文件的明細
for f in zip_list: # 遍歷這些文件,逐個解壓出來,
zip_file.extract(f,r'D:數據源')
zip_file.close() # 不能少!
print('昨日日誌解壓完成,請在文件夾中驗收!')
download_XXlog()
拓展
作為拓展,這里再加一個可以根據實際情況輸入(input)起始和終止日期,來下載一個特定時間段日誌的函數,這里就涉及了datetime和time這兩個工具包了。