web-dev-qa-db-ja.com

WindowsError:[エラー2]指定されたファイルが見つかりません

このコードに問題があります。フォルダ内のすべてのファイル名を変更して、+'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))
13
Alice Duff

サブディレクトリで問題が発生している可能性があります。

ファイル「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
_
11
Simon Callan

名前を変更するソースファイル名を決定するために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('+','_'))

拡張子のあるファイルが見つかった場合、明らかに、拡張子のないファイル名を変更しようとすると、「ファイルが見つかりません」エラーが発生します。

4
Jim Brissom