使用文件名中的正斜杠重命名文件(python)

时间:2018-06-21 10:36:26

标签: python filenames os.walk os.path invalid-characters

我们准备将一堆旧文件(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 - no such file or directory error

Windows不会在文件资源管理器或Powershell中列出文件。

所以我想知道是否有人对如何重命名这些文件或以某种方式摆脱正斜线有任何想法?

谢谢!

1 个答案:

答案 0 :(得分:-1)

我使用了 "Is it possible to use “/” in a filename?" thread 中提出的解决方案之一。这是我在 python 中的版本:

filename.replace('/', '\N{FULLWIDTH SOLIDUS}')

仅当您的目标文件系统支持文件名中的 unicode 时才有效。