os.rename не работает - PullRequest
       5

os.rename не работает

0 голосов
/ 24 мая 2018

Я пытаюсь переименовать файлы.Не хотите, чтобы файл начинался с "__".Пробовал использовать код из сообщения: Удаление символов из имени файла в пакете

При создании списка:

myDir = os.listdir(r"S:\Shared\Santa Rosa")
for x in myDir:
  ...

Я получаю этот вывод:

Tuesday
Wednesday
__1831.pdf
__1832.pdf
__1833.pdf
__1834.pdf
__1841.pdf
__1842.pdf
__1843.pdf
__1844.pdf
__1851.pdf
__1852.pdf
__1853.pdf
__1854.pdf
__1861.pdf
__1862.pdf

Но когда это сделать:

for x in myDir:
    os.rename(x, x.replace('__', ''))

Я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "<interactive input>", line 2, in <module>
WindowsError: [Error 2] The system cannot find the file specified

Ответы [ 4 ]

0 голосов
/ 24 мая 2018

Это работа для glob.Используйте его для фильтрации имен файлов.И поскольку он возвращает полезный путь, вам не нужно os.path.join.

>>> from glob import glob
>>> import os
>>> for fn in glob("tmp/__*.pdf"):
...     print(fn)
...     os.rename(fn, fn.replace("__", ""))
... 
tmp/__aaa.pdf
tmp/__bbb.pdf
0 голосов
/ 24 мая 2018

Используйте os.path.join, чтобы получить полный путь.

dirPath = r"S:\Shared\Santa Rosa"
myDir = os.listdir(dirPath)
for x in myDir:
   x = os.path.join(myDir, x)
   os.rename(x, x.replace('__', ''))
0 голосов
/ 24 мая 2018

Вы должны дать полный путь к os.rename, например что-то вроде

dirName = r"S:\Shared\Santa Rosa"
myDir = os.listdir(dirName)
for x in myDir:
    oldName = os.path.join(dirName, x)
    newName = os.path.join(dirName, x.replace('__', ''))
    os.rename(oldName, newName)
0 голосов
/ 24 мая 2018

os.rename() нужен полный путь к файлу:

os.rename(os.path.join(r"S:\Shared\Santa Rosa", x), os.path.join(r"S:\Shared\Santa Rosa", x.replace("__", ""))
...