Как изменить несколько имен файлов в определенной папке на Python? - PullRequest
0 голосов
/ 07 ноября 2018

, поэтому я использовал следующий код для изменения имени файла всех файлов в определенной папке.

import os
[os.rename(f,f.replace('20180810','2018_08_10')) for f in os.listdir()]

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я использую этот код, я должен сохранить его копию и вставить в папку, в которой находятся файлы. Я хотел бы иметь общий код, в котором я могу указать путь без необходимости быть в этой папке. Я попробовал следующее, но по какой-то причине он говорит, что не может найти файл:

path = 'E:/CSVFILES/20180808/'
[os.rename(f,f.replace('20180810','2018_08_10')) for f in os.listdir(path)]

Если я запускаю os.listdir (путь), он работает нормально и отображает файлы в папке, поэтому я не уверен, почему он не работает.

Спасибо!

1 Ответ

0 голосов
/ 07 ноября 2018

os.listdir перечисляет все файлы в каталоге, но без полного пути, а os.replace требует полного пути, если файл не находится в рабочем каталоге. Вместо этого используйте iglob, который возвращает полные пути:

>>> from glob import iglob
>>> path = 'E:/CSVFILES/20180808/*'
>>> for f in iglob(path):
>>>     os.rename(f, f.replace('20180810','2018_08_10'))

Редактировать: поскольку ваши файлы находятся в месте, содержащем тот же текст, который вы пытаетесь заменить, вы можете использовать basename и join только для замены текста в имени файла:

>>> from glob import iglob
>>> from os.path import basename, join
>>> path = 'E:/CSVFILES/20180808'
>>> for f in iglob(join(path, "*")):
>>>     os.rename(f, join(path, basename(f).replace('20180810','2018_08_10')))
...