2016-05-25 6 views
0

「を伝える」:Pythonのエラー:「リスト」オブジェクトが属性を持っていない私は、このコードのディレクトリにのみ* .CSVファイルをzip圧縮しようとしている

allFiles = os.listdir(dirName + apt + '/') 
csvList = [i for i in allFiles if i.endswith('.csv')] 
zf  = zipfile.ZipFile([ dirName + apt + '.zip' ], mode='w') 
for f in csvList: 
    a = dirName + apt + '/' + f 
    zf.write(a) 
#all the elements of a are strings 

私はエラーを取得する:

Traceback (most recent call last): 
File "<ipython-input-43-ebf4dc807b56>", line 1, in <module> 
zf.write(a) 
File "C:\Users\blevy\MCR\WinPython-64bit-3.4.3.5\python-3.4.3.amd64\lib\zipfile.py", line 1347, in write 
zinfo.header_offset = self.fp.tell() # Start of header bytes 

AttributeError: 'list' object has no attribute 'tell' 

このエラーには簡単な修正はありますか?

ありがとうございます。

BSL

答えて

2

は、この行:

zf = zipfile.ZipFile([ dirName + apt + '.zip' ], mode='w') 

は次のようになります。

zf = zipfile.ZipFile(dirName + apt + '.zip', mode='w') 

ZipFileは、ファイル名ではなく、ファイル名のリストを取るためです。

+0

dirName + apt + '.zip'の内容は文字列を形成します。文字列dirName 'は'/'文字を持ちますが、これは私が使用しているWindowsマシンです。希望を明確にするのに役立ちます。 –

+0

@BenjaminLevy:役に立たない。ファイル名の前後には '['と ']'があります。それはそれをリストにします。 'ZipFile'はリストを取ることはしません - それは単一のファイル名をとります。ブラケットを取り外す必要があります。 – Gerrat

+0

まあ、私の上の君。私はそれを試して、書き戻します。 Tx。 –

関連する問題