2015-09-03 4 views
0

Я пытаюсь заменить символ в нескольких файлах в нескольких подкаталогах (более 700 файлов в 50 или около того вложенных папок). Эти файлы работают, если я удаляю путь и помещаю файл в определенную папку; Однако, когда я пытаюсь использовать функцию os.walk, чтобы пройти через все подкаталоги, я получаю следующее сообщение об ошибке:Использование os.walk в Python

[Error 2] The system cannot find the file specified 

Это указывает на последнюю строку моего кода. Вот код в полном объеме:

import os 

path = "C:\Drawings" 

for root, dirs, files in os.walk(path): # parse through file list in the current directory 
    for filename in files: #os.listdir(path): 
     if filename.find("~"):# > 0: # if a space is found 
      newfilename = filename.replace("~","_") # convert spaces to _'s 
      os.rename(filename,newfilename) # rename the file 
+4

Ваше 'имя файла 'относительно. Вам нужно использовать 'os.path.join (root, filename)'. То же самое относится к 'newfilename'. –

ответ

2

Как уже было сказано, вы должны дать функцию Переименуйте полные пути для того, чтобы работать правильно:

import os 

path = r"C:\Drawings" 

for root, dirs, files in os.walk(path): # parse through file list in the current directory 
    for filename in files: 
     if "~" in filename: 
      source_filename = os.path.join(root, filename) 
      target_filename = os.path.join(root, filename.replace("~","_")) # convert spaces to _'s 
      os.rename(source_filename, target_filename) # rename the file 

Это также лучше, чтобы добавить r перед вашей строкой пути, чтобы остановить Python, пытаясь избежать того, что происходит после обратной косой черты.

+0

Благодарим вас за это. Это немного меня научило и решило мою проблему. –

+0

Я рад, что решил вашу проблему. Вы также можете нажать на галочку рядом с ответом, чтобы принять решение. Это также даст вам значок. –