0

私のpythonスクリプトは.pdfファイルをダウンロードしますが、動的に生成された名前を持っているため、名前を変更して、それらのファイルをフォルダ内に移動します。 しかし、私が知っているところでは、 だから、私はこのコードがうまくいかないと思うのです。os.renameを使用して不明確な名前のファイルを移動する方法は?

os.rename('downloads/*.pdf','outputs/' + jpm + '/' + jpm + '-oa.pdf') 

私もshutil.moveを使用し、それは私はあなたが表示されます一つに私のようなエラーを与えたが、それは唯一のos.renameが全体のライン不満ソースディレクトリ不満。

FileNotFoundError: [Errno 2] No such file or directory: 'downloads/*.pdf' -> 'outputs/JPM0522733/JPM0522733-oa.pdf' 

このタスクはどのように達成できますか?

答えて

0

モジュールglobは、ワイルドカードに相当するものを実装します。あなたはその後、その長さはそれほど新しいを関連付けるようlen(dfiles)に等しいリストを作成することができます、あなたは異なっダウンロードしたファイルの名前を変更することを確認し取得するように、そう

import glob 
dfiles = glob.glob1('downloads','*.pdf') 

のように、ダウンロードしたファイルのリストを作ることができますそれぞれの名前。

jpm = 'JPM0522733' 
nfiles = map(lambda i: '{0}-{1}oa.pdf'.format(jpm,i), 
      ['']+list(range(len(dfiles))) 
     ) 

あなたのpython < 3の下にある場合 contrarioはのpython3の+下can only concatenate list (not "range") to listエラーの原因となる、リストに範囲を有効にする必要がないことに注意してください。各PDFファイルの名前を変更する

、最終的に並行して考えられて二つのリスト、以上のループ、

for dfile,nfile in zip(dfiles,nfiles): 
    os.rename( 
     os.path.join('downloads', dfile), 
     os.path.join('outputs', jpm, nfile) 
    ) 

名前"downloads"あるフォルダ、"outputs"jpmが存在しないと仮定すると。そうでない場合は、それらを作成する必要があります。

+0

ありがとうございます。 私は現在このエラーが発生しています。 [''] + range(len(dfiles)) TypeError:リストを連結することができます(範囲ではない) – Gdfelt

+0

@Gdfelt。これはpython27では可能ですが、python3では不可能です。このエラーは '[''] + range(len(dfiles))'行に起因します。私は新しいことを学びました。私の更新を参照してください。 Justeは '[''] + list(range(len(dfiles)))' – Kanak

+0

で行を置き換えます。 ありがとうございます。 – Gdfelt

関連する問題