このコードに問題があります。フォルダ内のすべてのファイル名を変更して、+'s
が含まれないようにしようとしています!これは以前に何度も機能していましたが、突然エラーが発生します:
WindowsError: [Error 2] The system cannot find the file specified at line 26
26行目はコードの最後の行です。
なぜこれが起こっているのか誰か知っていますか?コードがあるので、5分でこれができると誰かに約束しました!残念ながらうまくいきません!!
import os, glob, sys
folder = "C:\\Documents and Settings\\DuffA\\Bureaublad\\Johan\\10G304655_1"
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
filename = os.path.join(root, filename)
old = "+"
new = "_"
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
if old in filename:
print (filename)
os.rename(filename, filename.replace(old,new))
サブディレクトリで問題が発生している可能性があります。
ファイル「a
」、「b
」、およびサブディレクトリ「dir
」がファイル「_sub+1
_」および「_sub+2
_」にあるディレクトリがある場合"、os.walk()
を呼び出すと、次の値が生成されます。
_(('.',), ('dir',), ('a', 'b'))
(('dir',), (,), ('sub+1', 'sub+2'))
_
2番目のタプルを処理するとき、_'sub+1', 'sub_1'
_が必要な場合、_'dir\sub+1', 'dir\sub_1'
_を引数としてrename()
を呼び出します。
これを修正するには、コードのループを次のように変更します。
_for root, dirs, filenames in os.walk(folder):
for filename in filenames:
filename = os.path.join(root, filename)
... process file here
_
何かをする前に、ディレクトリとファイル名を連結します。
編集:
上記は正しい答えだと思いますが、正しい理由ではありません。
ディレクトリに「_File+1
_」というファイルがあるとすると、os.walk()
は
_("C:/Documents and Settings/DuffA/Bureaublad/Johan/10G304655_1/", (,), ("File+1",))
_
「_10G304655_1
_」ディレクトリにいる場合を除き、rename()
を呼び出すと、ファイル「_File+1
_」はcurrentディレクトリ。これは、os.walk()
が検索するディレクトリと同じではないためです。os.path.join()
を呼び出すことにより、yuoは、renameに正しいディレクトリを検索するように指示しています。 。
編集2
必要なコードの例は次のとおりです。
_import os
# Use a raw string, to reduce errors with \ characters.
folder = r"C:\Documents and Settings\DuffA\Bureaublad\Johan\10G304655_1"
old = '+'
new = '_'
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
if old in filename: # If a '+' in the filename
filename = os.path.join(root, filename) # Get the absolute path to the file.
print (filename)
os.rename(filename, filename.replace(old,new)) # Rename the file
_
名前を変更するソースファイル名を決定するためにsplitext
を使用しています:
filename_split = os.path.splitext(filename) # filename and extensionname (extension in [1])
filename_zero = filename_split[0]#
...
os.rename(filename_zero, filename_zero.replace('+','_'))
拡張子のあるファイルが見つかった場合、明らかに、拡張子のないファイル名を変更しようとすると、「ファイルが見つかりません」エラーが発生します。