2017-08-11 8 views
0

私はZipファイルをWebサイトからダウンロードしました。私はzipファイルの名前を変更し、解凍する前に、いくつのファイルが入っているかチェックして解凍するスクリプトを作っていました。python:解凍エラー 'そのようなファイルやディレクトリはありません'

問題は、zipファイルがディレクトリにあるということですが、それは ことを私にエラーを与えておく、私はそれはによって引き起こされる可能性があることを前提とfilename.zip「『 』 FileNotFoundError:[errnoを2]いいえそのようなファイルまたはディレクトリ」ファイル名は私がubuntuを使っているので、ファイルをダウンロードしたときに英語ではないので名前が壊れていました。だから私は数値に変更しました(例:20176)が、まだこのエラーが発生しています。

マイスクリプト パスは絶対パスを意味します。

data_type = '{}{}'.format('201706', '.zip') 
    filename = [i for i in os.listdir('user/directory')] 
    filename.sort(key=lambda ctime: ctime[0]) 
    downloaded = str(filename[0]) 

    old = os.path.join('user/directory', downloaded) 
    new = os.path.join('user/directory', data_type) 
    os.rename(old, new) 

    zip = ZipFile(data_type) 
    archived_files = zip.namelist() 
    amount = len(archived_files) 

答えて

0

のは、ソートされたリストの最初のファイル名がmyfile.txtのあるとしましょう。 ユーザー/ディレクトリへのあなたのコード

old = os.path.join('user/directory', downloaded) 
new = os.path.join('user/directory', data_type) 
os.rename(old, new) 

、ディレクトリリストの最初のファイルの名前を変更ユーザー/ディレクトリ/ myfile.txtの(による上記の考慮にいない、最も古い1)/ 201706.zip 。次の文は、2010706.zipを開こうとしますが、もちろん存在しません。あなたは残念ながら、操作は失敗する可能性がありますので、ファイルが実際に、zipファイルになるという保証はありません

zip = ZipFile(new) 

をしようとした場合には動作するはずです。

おそらく他の質問では、考慮すべきいくつかの他のポイント:

私はあなたがソート機能を誤解している疑いがある:あなたは、作成時にファイル名のリストをソートしたいように見えるが、ちょうどctime doesnのラムダのパラメータを呼び出しますPythonがあなたのニーズを理解することを意味しません。プログラミング言語だけでDWIM(「何を意味するか」)モードがあれば、人生ははるかに簡単になります!

sortからkey引数はsort関数は(つまり、必要な順序で、その場所を表す値である)「ソートキー」を返すことを期待し、それぞれの値をソートするために一度のために呼び出す関数です。私はあなたのラムダを取ると、ファイル名にそれを適用するとします

In [1]: ruth_lambda = lambda ctime: ctime[0] 

In [2]: ruth_lambda("MY_FILENAME.TXT") 
Out[2]: 'M' 

あなたは、ファイル名の最初の文字でソートされていることがわかります、と私はそれはあなたが本当に欲しいものだ疑い。しかし、後でそれに入ることができます。書式設定の

簡単なメモ:os.listdirはなく

filename = [i for i in os.listdir('user/directory')] 

の、リストを返すので、それはだ、最後に

data_type = '{}.zip'.format(zipfile_name) 

として

data_type = '{}{}'.format(zipfile_name, '.zip') 

を書く方が簡単だっただろう書き込みが簡単

余分な計算が害を及ぼさないが、
filename = os.listdir('user/directory') 

初心者としては、あなたが改善するにつれて、古いコードが本当に頑丈に見えるようになります。心配する必要はありません。これは一般的な体験です!ただ前進し、古い間違いを繰り返さないようにしてください。

+0

私はコードを編集しました。無関係なコードを削除し、 'path'の代わりにstringを入れてください – ruth

関連する問題