2017-11-23 9 views
2

私はこの問題を解決しようと最後の4時間を費やしました。私はウェブサイトから画像をダウンロードし、それらをユーザ/温度に保存しています。私がしたいのは、イメージをダウンロードするときに、同じ名前のファイルが既に存在するかどうかを確認するために一時フォルダを確認することです。存在する場合は、f文字列とカウンタを使用して名前を変更しますが、それでもダウンロードして保存してください。コピーを作成中にファイル名の名前を変更しますか?

for bmp in bmp_list: 
     fullfilename = os.path.join(f'{dl_location}', f'{bmp}') 
     dl_link = url + bmp 
     urllib.request.urlretrieve(dl_link, fullfilename) 

     if os.path.isfile(fullfilename): 
      print('file already exists, renaming.') 
      os.rename(fullfilename, f'copy{c}-{fullfilename}') 
      c =+1 
     else: None 

は、私は私のコードは、それがあると明らかにそれはそこに私はちょうどそれをコピーしているためであるかどうかをチェックする、その後、ファイルを作成していることを知っているが、私はかなりこだわっています。 大歓迎です!

編集:私はこのコードを実行すると、私はエラーメッセージ

FileNotFoundError: [Errno 2] No such file or directory: '/Users/Home/Temp/CW/monty-python-(1).bmp' -> 'copy1-/Users/Home/Temp/CW/monty-python-(1).bmp' 
+0

実際の問題は何ですか?どのような動作やエラーが表示されますか?また、この参照はほぼ同じです:https://stackoverflow.com/q/30664786/1531971 – jdv

答えて

2

を取得する問題は、あなたがcopy{c}絶対パスの前に付けることのようです。代わりに接尾辞を使用してください:

os.rename(fullfilename, f'{fullfilename}-copy{c}') 

はまた、あなたがダウンロードする前に、既存のファイルの名前を変更する必要があります。ダウンロードが遅すぎると、元のファイルは既に消えています。したがって、ダウンロード手順の前にifステートメントを移動してください。

最後に、簡単な接尾辞を使用することの欠点は、ファイル名拡張子.bmpの後に続くことです。簡単な対策はf'{fullfilename}-copy{c}.bmp' as the new name, with the drawback that there will be .bmp`を2回使用することです。それが問題であれば、基本名と拡張子を分割し、ベース名を使用して新しい名前を目的のフォーマットでフォーマットすることで、もう少し作業を進めればさらにうまくいくでしょう。

+0

それは元のファイルを上書きします。ファイル拡張子も変更されます。エラーが停止し、プログラムが実行されますが、元のファイルが上書きされます。 – Eugeen

+0

@Eugeen私は問題を見る、私の更新された答えを参照してください – janos

+0

ありがとう男私はそれを感謝します! – Eugeen

関連する問題