Переименование файлов с косой чертой в имени файла (python)

1

У нас есть куча старых файлов (1990-е годы), которые мы собираемся импортировать в новую систему. Некоторые из этих файлов имеют косую черту/в имени файла, и нам нужно переименовать их перед импортом (они будут в конечном итоге в Azure).

У нас есть код python, который идет по каталогу:

for root, dirs, files in os.walk(base_path):
  for filename in files:
    path = os.path.abspath(os.path.join(root, filename))

А затем попытки переименовать любые файлы не нравятся внешний вид использования os.rename. Это отлично работает, за исключением файлов с косой чертой в имени файла - даже os.path.exists терпят неудачу в этих файлах, используя path рассчитанный выше.

В os.path.exists мы попытались заменить:

  • толстая кишка с косой чертой
  • двоеточие с удаленной косой чертой /
  • двоеточие с ободочной кишкой:

И мы всегда получаем False задницу. И ошибка "Нет такого файла или каталога" при попытке os.path.rename. Имя файла имеет косую черту, но оно обрабатывается ОС как двоеточие: - по крайней мере, то, что os.walk сообщает об имени файла.

Мы также получаем IOError: [Errno 2] No such file or directory когда вы делаете

fileobj = open(path)

Мы не можем переименовывать файлы вручную в Finder. Вы заметите, что Finder отображает имя файла с помощью косой черты (извините, нет ссылки на ссылки): finder rename error

Или из командной строки - здесь отображается имя файла с двоеточием: terminal - нет такой ошибки файла или каталога

Windows не будет перечислять файлы в File Explorer или Powershell.

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

Заранее спасибо!

Теги:
filenames
os.walk
os.path

1 ответ

0

В итоге мы написали небольшое консольное приложение.NET, которое называлось встроенным Synology API для переименования файлов. Это работало нормально на именах файлов с косой чертой, но мы не могли заставить его переименовывать папки с косой чертой, так что это было сделано вручную нашим менеджером проектов! (их было 83)

Код здесь: https://github.com/ben--wood/Synology.NET (ответвление отсюда https://github.com/brunskillage/Synology.NET - спасибо Аллану Бранскиллу).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню