【问题标题】:Special characters in OSX filename ? (Python os.rename)OSX 文件名中的特殊字符? (Python os.rename)
【发布时间】:2010-12-26 04:04:22
【问题描述】:

我正在尝试使用 python 脚本在 OSX 上自动重命名一些文件。但我无法使用正斜杠等特殊字符:

oldname = "/test"
newname = "/test(1\/10)"
os.rename(oldname, newname)

我想我确实有编码问题。但是使用 re.escape 或使用 UTF-8 unicode 编码的不同尝试对我来说并没有成功。你有提示吗?

谢谢! 马可

【问题讨论】:

  • 那个字符串甚至不是你想的那样。它确实是文字 test(1\/10),带有两个斜杠。

标签: python macos path character-encoding filesystems


【解决方案1】:

大多数文件系统的共同点是它们不允许在文件名中使用目录分隔符(斜杠)。

也就是说,在 Mac OS X 中,您可以在查找器中显示带有斜杠的文件名,您可以尝试将斜杠替换为 :

【讨论】:

  • 谢谢,用冒号替换正斜杠会得到所需的输出。它在 Finder 中以可视方式呈现,就好像我使用了正斜杠一样。 OSX文件名中直接禁止冒号?是否有任何功能可以进行转换(可能包括其他棘手的字符?
  • 是的,冒号是禁止的。对函数一无所知,更不用说python函数了。
  • 好的,一个更好的 python 功能会很好,但这样就可以了!谢谢!这也可能是相关的:stackoverflow.com/questions/1033424/…
  • 这并不是 Python 的错:OS X 中的 real 路径分隔符是斜线。这只是一个 Finder 显示 hack,使 : 误导性地显示为 /;在命令行上你会看到真正的角色。这个奇怪的地方大概是为了满足那些过去能够在文件名中使用/ 的老派 Mac 用户,因为 OS X 之前的路径分隔符曾经是冒号。
  • 是的,和python完全没有关系。我对 python 几乎一无所知,但我能够回答这个问题 ;-)
【解决方案2】:

如果您尝试重命名文件夹“/test”,则需要以 root 身份运行 python,否则您将无权更改 root 中的内容。此外,您的新名称中的斜杠将不起作用,因为 python 会尝试查找目录“/test(1”),因此您必须放开目录分隔符。此外,python 文档中的这可能会有所帮助。

将文件或目录 src 重命名为 dst。如果 dst 是一个目录,则会引发 OSError。在 Unix 上,如果 dst 存在并且是一个文件,如果用户有权限,它将被静默替换。如果 src 和 dst 在不同的文件系统上,该操作可能会在某些 Unix 风格上失败。如果成功,重命名将是一个原子操作(这是 POSIX 要求)。在 Windows 上,如果 dst 已经存在,即使是文件也会引发 OSError;当 dst 命名现有文件时,可能无法实现原子重命名。可用性:Unix、Windows。

【讨论】:

  • python会试试?蟒蛇有那么差吗?它不会按原样将它传递给系统调用并让操作系统失败吗?
  • 为简单起见,我在根目录中使用了该文件,但我得到 OSError: [Errno 2] No such file or directory。这就是为什么我更希望有一个我可以使用的编码/转义函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 2017-04-06
  • 2014-04-17
  • 2016-02-04
相关资源
最近更新 更多