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 SettingsDuffABureaubladJohan10G304655_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))
2 ответов
я подозреваю, что у вас могут быть проблемы с подкаталогами.
если у вас есть каталог с файлами "a
","b
" и подкаталог "dir
" с файлами "sub+1
" и "sub+2
" вызов os.walk()
даст следующие значения:
(('.',), ('dir',), ('a', 'b'))
(('dir',), (,), ('sub+1', 'sub+2'))
когда вы обрабатываете второй кортеж, вы вызовете rename()
С 'sub+1', 'sub_1'
в качестве аргументов, когда то, что вы хотите 'dir\sub+1', 'dir\sub_1'
.
чтобы исправить это, измените цикл в коде кому:
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
filename = os.path.join(root, filename)
... process file here
который объединит каталог с именем файла, прежде чем вы что-либо с ним сделаете.
Edit:
я думаю, что это правильный ответ, но не совсем правильная причина.
если у вас есть файл "File+1
" в каталоге, os.walk()
вернутся
("C:/Documents and Settings/DuffA/Bureaublad/Johan/10G304655_1/", (,), ("File+1",))
если вы находитесь в "10G304655_1
" каталог, когда вы называете rename()
файл "File+1
" не найден в настоящее каталог, так как это не то же самое, что каталог os.walk()
смотрит на. Выполнив вызов os.path.join()
yuo говорят переименовать, чтобы посмотреть в правильном каталоге.
Изменить 2
примером требуемого кода может быть:
import os
# Use a raw string, to reduce errors with \ characters.
folder = r"C:\Documents and Settings\DuffA\Bureaublad\JohanG304655_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('+','_'))
Если вы столкнулись с файлом с расширением, очевидно, попытка переименовать имя файла без расширения приведет к ошибке" файл не найден".