2014-01-24 15 views
2

如何在Python中使用一個循環壓縮多個文件?在Python中使用循環壓縮幾個文件

我試過,但它給了我一個錯誤:

from zipfile_infolist import print_info 
import zipfile 
import fileinput 
import glob 
import os 

for name in glob.glob('*.xlsx'): 
    zf = zipfile.ZipFile('%(name)s.zip', mode='w') 
    try: 
     zf.write('%(name)s') 
    finally: 
     print 'closing' 
     zf.close() 
    print 
    print_info('%(name)s') 

這是回溯:

Traceback (most recent call last): 
    File "C:/Users/Fatt-DELL-3/ser.py", line 10, in <module> 
    zf.write('%(name)s') 
    File "C:\Program Files\IBM\SPSS\Statistics\22\Python\lib\zipfile.py", line 1031, in write 
    st = os.stat(filename) 
WindowsError: [Error 2] The system can not find the file specified: '%(name)s' 
+0

對不起,我的代碼。我不知道在這個網站上寫代碼 – shasj

+0

1.刪除所有的反標記。 2.所有代碼都需要至少縮進4個空格。 – Gerrat

+0

(1)您可以通過突出顯示該部分並單擊「{}」按鈕來使用塊代碼。 (2)您不需要每行代碼的新行距...... – alvas

回答

2

如果你看看Python's string formatting documentation,您使用的是mapping類型的操作每當你的字符串包含像'%(name)s。對於這一點,你需要像一個字典,例如映射對象遵循它:

'%(name)s' % {'name':name} 

您需要將它添加到每一個地方,你已經把「%(名稱)S」

所以地方這些行:

zf = zipfile.ZipFile('%(name)s.zip', mode='w') 
zf.write('%(name)s') 
print_info('%(name)s') 

應該寫成:

zf = zipfile.ZipFile('%(name)s.zip' % {'name':name}, mode='w') 
zf.write('%(name)s' % {'name':name}) 
print_info('%(name)s' % {'name':name}) 
+0

非常感謝!在這個語法中,壓縮目錄也是,但我只想壓縮文件。你知道我是怎麼做到的?謝謝 – shasj

+0

你有以'.xlsx'結尾的目錄名?如果你只想要文件,你可能想要以不同的方式遍歷目錄(例如,見[回答] [這裏是http://stackoverflow.com/questions/120656/directory-listing-in-python)) – Gerrat

相關問題