У нас есть куча старых файлов (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.
Поэтому мне было интересно, есть ли у кого-нибудь идеи о том, как переименовать эти файлы или как-то избавиться от косых черт, пожалуйста?
Заранее спасибо!
В итоге мы написали небольшое консольное приложение.NET, которое называлось встроенным Synology API для переименования файлов. Это работало нормально на именах файлов с косой чертой, но мы не могли заставить его переименовывать папки с косой чертой, так что это было сделано вручную нашим менеджером проектов! (их было 83)
Код здесь: https://github.com/ben--wood/Synology.NET (ответвление отсюда https://github.com/brunskillage/Synology.NET - спасибо Аллану Бранскиллу).