【发布时间】:2018-06-21 10:36:25
【问题描述】:
我们准备将一堆旧文件(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 的任何文件。除了文件名中带有正斜杠的文件外,这工作正常 - 即使使用上面计算的 path 在这些文件上 os.path.exists 失败。
在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 中列出文件。
所以我想知道是否有人对如何重命名这些文件或以某种方式摆脱正斜杠有任何想法?
提前致谢!
【问题讨论】:
-
感谢@JonatasCD - 我们遇到的问题不在于文件路径,我们没有在 Windows 中进行此处理。问题在于包含正斜杠的文件名。
-
但我知道所提到的问题可以为您提供类似的解决方案。也许我错了。你检查了吗,@ben-wood?
-
是的,谢谢@JonatasCD - 我们正在使用 os.path.join 创建我们的文件路径,但更仔细地阅读这个问题(感谢轻推)也许我们需要尝试在文件名前加上 raw字符串 r 前缀。我试试看……
-
谢谢@dm295 我也读过那个——这让我觉得除了在不同的操作系统上可能没有办法重命名这些文件
标签: python filenames os.walk os.path invalid-characters