特定の構造に従った複数のzipファイルで複数のフォルダを圧縮するためのスクリプトを少し作成しています。私は構造体をリストとして構築しました。いくつかのエントリがあります:PythonのZipFileモジュール - ランタイムの問題
['E:\Documents\UFSCar\Primeiro Ano\Primeiro Semestre\Cálculo 1',
'E:\Documents\UFSCar\Primeiro Ano\Segundo Semestre\Estatistica',
'E:\Documents\UFSCar\Primeiro Ano\Segundo Semestre\Estruturas Discretas',
'E:\Documents\UFSCar\Primeiro Ano\Segundo Semestre\Introdução à Engenharia']
ここでは、ファイルをまとめて圧縮する2つの方法があります。
def zipit (path, archname):
# Create a ZipFile Object primed to write
archive = ZipFile(archname, "w", ZIP_DEFLATED) # "a" to append, "r" to read
# Recurse or not, depending on what path is
if os.path.isdir(path):
zippy(path, archive)
else:
archive.write(path)
archive.close()
return "Compression of \""+path+"\" was successful!"
def zippy(path,archive):
paths = os.listdir(path)
for p in paths:
p = os.path.join(path,p)
if os.path.isdir(p):
zippy(p,archive)
else:
archive.write(p)
return
主要部分は、スクリプトはこのようなものですOS:これは、ファイルの大きな数のためによく実行するスクリプトを作ったので、私は、数値インデックスを使用しました
for i in range(len(myList)):
zipit(myList[i],os.path.split(myList[i])[1])
。それ以前は、私たちが書いたzipファイルは2つしかありません。このようにして、約8人が最後まで道を行く。なぜか言わない。
スクリプトは単純にリストを反復し、各スクリプトを個別のzipファイルとして圧縮します。問題は、リストのサイズが大きい場合に発生します。次のエラーメッセージが表示されます。
Traceback (most recent call last):
File "E:\Documents\UFSCar\zipit.py", line 76, in <module>
zipit(listaDisciplinas[i],os.path.split(listaDisciplinas[i])[1])
File "E:\Documents\UFSCar\zipit.py", line 22, in zipit
zippy(path, archive)
File "E:\Documents\UFSCar\zipit.py", line 11, in zippy
zippy(p,archive)
File "E:\Documents\UFSCar\zipit.py", line 11, in zippy
zippy(p,archive)
File "E:\Documents\UFSCar\zipit.py", line 13, in zippy
archive.write(p)
File "C:\Python27\lib\zipfile.py", line 994, in write
mtime = time.localtime(st.st_mtime)
ValueError: (22, 'Invalid argument')
このエラーの原因は分かりますか?感謝! ありがとう!
EDIT:
私はファイルをTESTEするには、以下の提供されたコードを使用しました、問題は、彼らの「最終更新」のタイムスタンプに問題を持つファイルでした。何らかの理由で未知のものがあったが、そのうちのいくつかは2049年に最後の修正を行った。
その場合、Python zipfileモジュールは、ValueErrorがスローされたときにファイルを圧縮できませんでした。
私の解決策:問題のあるファイルをタイムスタンプに変更してください。いつかはもっと良い解決策があると私は確かに検証します。
誰もが助けてくれてありがとう。
print文をzipfile.pyに入れて、この呼び出しのすぐ上のst.st_mtimeの値を出力できますか? –
影響を受けるファイルのmtimeは何ですか? –