0

ヘルプ!特定の拡張子を持つファイルを移動してデスクトップを整理するスクリプトを書いていました。正常に動作しているように見えましたが、デスクトップに放すと、奇妙なことが起こりました。

そのため、「PDF」や「IMAGES」のようにその場で作成されたフォルダーにすべてのファイルをコピーしますが、何らかの理由でスクリプトを実行すると、フォルダーは作成されずにファイルが作成され、ファイルが別のファイルに保存されます。

私はこれらの人を取り戻す必要がありますが、何をすべきかわかりません。ちなみにWindows7を使っています。以下は私のコードです。どんな助けでも大歓迎です。

import shutil
import os

pwd = os.getcwd()
working_path = 'C:\\Users\\grayson\\Desktop'
wp = working_path
folders = {'pdf':'PDFS','img':'IMAGES'}

def main():
    create_folders();

    for d in os.walk(wp):
        files = d[2]
        break
    print files

    for filename in files:
        order_file( filename )


def create_folders():
    for fol in folders.keys():
        fol_name = folders[fol]
        if not os.path.isdir(fol_name):
            os.mkdir(fol_name)

def order_file(fname):
    split_name = fname.split('.')
    exten = split_name[len(split_name)-1]

    if exten == 'pdf':
        shutil.move(wp + '\\' + fname, wp + '\\' + folders['pdf'])
    elif exten == 'jpg' or exten == 'png' or exten == 'gif':
        shutil.move(wp + '\\' + fname, wp + '\\' + folders['img'])
    else:
        print 'Sumin else'

main()
4

2 に答える 2

2

これは、基本的にファイルをソートされたディレクトリに移動するための非常に扱いにくいスクリプトです。しかし、ここで何がうまくいかなかったのかについての私の推測です。これを現在の作業ディレクトリとして実行しなかった場合Desktop(つまり、スクリプトを実行したときにこのディレクトリにいなかった場合)、フォルダは別の場所に作成されています。次に、ファイルが移動し始めたとき、ディレクトリは存在しなかったため、新しいファイルとして互いに移動しました。

残念ながら、このダメージを元に戻すことはできません。あなたの唯一の希望は、バックアップがあることです。

スクリプトの一部を詳しく説明させてください...

pwd = os.getcwd()
working_path = 'C:\\Users\\grayson\\Desktop'

pwdが と同じでない場合working_path、スクリプトですべてがうまくいきません。また、Windows でも常にスラッシュを使用する必要があります。その有効性とパス構築の容易さ:working_path = 'C:/Users/grayson/Desktop'

フォルダ作成セクション:

# BEFORE
def create_folders():
    for fol in folders.keys():
        fol_name = folders[fol]
        if not os.path.isdir(fol_name):
            os.mkdir(fol_name)

working_pathディレクトリが実際に変数の下に作成されることを保証しません。これは次のように記述できます。

# AFTER
def create_folders():
    for fol_name in folders.itervalues():
        fol_path = os.path.join(working_path, fol_name)
        if not os.path.isdir(fol_path):
            os.mkdir(fol_path)

そうすれば救われたかもしれません。Desktopスクリプトを実行した場所ではなく、具体的にディレクトリを作成していたでしょう。

# BEFORE
split_name = fname.split('.')
exten = split_name[len(split_name)-1]

拡張機能を取得するための大量の入力。次の方法でこれを簡単にすることができます。

# AFTER
exten = fname.split('.')[-1]

そして最後に、ファイルを移動する部分:

# BEFORE
if exten == 'pdf':
    shutil.move(wp + '\\' + fname, wp + '\\' + folders['pdf'])
elif exten == 'jpg' or exten == 'png' or exten == 'gif':
    shutil.move(wp + '\\' + fname, wp + '\\' + folders['img'])
else:
    print 'Sumin else'

スラッシュを追加してパスを構築し、ディレクトリ名への宛先のみを構築しました。そのディレクトリが存在しない場合は、ファイルと見なされます。特定のファイル名にビルドする必要があります。

# AFTER
src = os.path.join(wp, fname)
key = None

if exten == 'pdf':
    key = 'pdf'
elif exten in ('jpg', 'png', 'gif'):
    key = 'img'

if key:
    shutil.move(src, os.path.join(wp, folders['img'], fname))
else:
    print 'Sumin else'

この方法では、ディレクトリが存在しない場合は確実に失敗します。

于 2012-07-19T05:25:52.300 に答える
1

安全な方法でディレクトリを作成していません。

推測することはできますが、以前の試行で PDFS などと呼ばれるファイルがあり、ディレクトリが作成されなかった可能性があります。それで、すべての画像を次々に IMAGES に「名前を変更」しました...戻ることはできません。

事前にバックアップしていただければ幸いです。

于 2012-07-19T05:15:54.350 に答える