2011-08-10 9 views
10

私は今、約3週間はPythonを学んできましたが、現在、ファイル名に表示されるキーワードと日付でファイル(約10.000)を並べ替えるための小さなスクリプトを書こうとしています。特定の日付より前のファイルをアーカイブに追加する必要があります。ソートは正常に動作しますが、アーカイブは行われません。Python:ディレクトリなしでアーカイブにファイルを取得するには?

アーカイブを作成します。名前は問題ありませんが、アーカイブにはファイルへの完全なパスが入ります。 私がそれを開くと、それはfolder1 -> folder2 -> folder3 -> filesのように見えます。

アーカイブに構造全体ではなくファイルのみが含まれるように変更するにはどうすればよいですか?以下は

itemsは、日付順に並べ替えられたファイルとフォルダです、folderは、名前のキーワードでソートされたファイルとサブフォルダで、nodeファイルがソートする前にしたパスで、私のジップ機能付きスニペットです。私は、Python 2.6

def ZipFolder(node, zipdate): 
    xynode = node + '/xy' 
    yznode = node + '/yz' 
    for folder in [xynode,yznode]: 
     items = os.listdir(folder) 
     for item in items: 
      itemdate = re.findall('(?<=_)\d\d\d\d-\d\d', item) 
      print item 
      if itemdate[0] <= zipdate: 
       arcname = str(item) + '.zip' 
       x = zipfile.ZipFile(folder + '/' + arcname, mode='w', compression = zipfile.ZIP_DEFLATED) 
       files = os.listdir(folder + '/' + item) 
       for f in files: 
        x.write(folder + '/' + item + '/' + f) 
        print 'writing ' + str(folder + '/' + item + '/' + f) + ' in ' + str(item) 
       x.close() 
       shutil.rmtree(folder + '/' + item) 
    return 

を使用しています

私はまた、任意の提案や改善に開いています。ヘルプ(zipファイル)から

答えて

13

| write(self, filename, arcname=None, compress_type=None) 
|  Put the bytes from filename into the archive under the name 
|  arcname. 

だから、()を呼び出して、あなたの書き込みを変更してみてください:あなたのコードについて

x.write(folder + '/' + item + '/' + f, arcname = f) 

、それが特に3週間、私には十分に良いと思われますpythonist、いくつかのコメントは歓迎されていただろう;-)

+0

コメントではなくdocstring。関数が何をしているのか、何が役に立つのかを説明してください。どのように動作するのか、そしてdocstringはそのために最も便利です。 –

+0

すごくうまくいきます。 – rny

+0

@Jan Hudec:docstringの場合は、次のようになります。 def ZipFolder(node、zipdate): "" "zipdate"よりも古いファイルは 'node'のサブフォルダに "" " – rny

関連する問題