2014-01-24 13 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

相关问题