【问题标题】:Escaping a forward slash path directory in Mac OSX using Python?使用 Python 在 Mac OSX 中转义正斜杠路径目录?
【发布时间】:2012-07-10 06:12:06
【问题描述】:

这是我的第二篇文章,如果我做错了什么,我深表歉意——我会尽量简洁。

我做了一些搜索,大多数转义必须处理嵌入的 JSON 字符串 - 我的问题实际上是打开文件本身。

目前,我正在尝试使我的代码尽可能通用,所以我正在使用:

file = open(os.path.expanduser(r'~/Desktop/Austin/Tweets/10_7_2012_12/09-Tweets.txt'), 'r')

问题是,当解释器看到这段代码时,它会看到文件名中的“/”,我认为它试图进入另一个目录。我通过删除文件名中的“/”并输入来确认这一点:

file = open(os.path.expanduser(r'~/Desktop/Austin/Tweets/10_7_2012_1209-Tweets.txt'), 'r')

它加载得很好。

对所有这些文件这样做的问题是我有数百个文件包含数千条推文,这有点不切实际。

所以我的问题是: 有没有办法在文件 name 中加载带有正斜杠的文件?

我看到了许多使用搜索按钮加载文件的方法,但没有一种方法包括如何处理名称中的正斜杠...我已经尝试过:

file = open(os.path.expanduser('~/Desktop/Austin/Tweets/10_7_2012_12\/09-Tweets.txt'), 'r')

file = open(os.path.expanduser('~/Desktop/Austin/Tweets/10_7_2012_12//09-Tweets.txt'), 'r')

一切都无济于事。

如果有人愿意教一个天真的本科生,欢迎解释 Python 如何处理正斜杠。

我在 Leopard 上使用 Mac OSX。我正在运行一个与 Twitter 流 API 通信的网络爬虫;名称中的斜线是用“/”保存它们的结果,以指定日期。

解决方案: 您可以在 Mac OSX 上的文件名中使用正斜杠。 从文件系统的角度来看,/ 实际上是一个冒号,它在 Finder 中被翻译成 /。

Kindall 的解释如下: Carbon 层是必需的,它使用标准的 Mac 文件名分隔符、冒号。自 1984 年以来,Mac 文件名中一直允许使用斜杠。Mac 用户还希望在 GUI 中看到冒号,而不是斜杠作为路径名分隔符(或者至少在 2001 年,当这种行为被制定时)。

【问题讨论】:

  • Python 不“处理”正斜杠。它只是将路径传递给底层操作系统,它会做任何事情。我熟悉的操作系统不会有这个问题,因为你不能创建一个以这样的名称开头的文件。您使用的是什么操作系统以及如何创建此类文件?最简单的解决方案是一开始就不要创建它们。
  • 我在 Leopard 上使用 Mac OSX。我正在运行一个与 Twitter 流 API 通信的网络爬虫;名称中的斜线是用“/”保存它们以指定日期的结果。
  • @KalîlÁrmstrøng 您应该将其添加到问题中。您应该用文件名中允许的另一个字符替换名称中的斜杠。
  • 完成了,多亏了 Russel,我已经弄明白了。感谢您的帮助。

标签: python path directory escaping


【解决方案1】:

我假设您使用的是类 Unix 操作系统,我的理解是在此类系统中的文件名中不允许使用正斜杠。如果您在~/Desktop/Austin/Tweets/ls,您会看到什么?

【讨论】:

  • 更好的是,做一个os.listdir('~/Desktop/Austin/Tweets/')
  • *NIX 文件系统中不允许使用正斜杠,Windows 文件系统中也不允许使用正斜杠。
  • 文件名中有正斜杠?
  • 哦,天哪,在 Finder 中将冒号转换为斜线是一个可怕的错误功能。 :(
  • Carbon 层是必需的,它使用标准的 Mac 文件名分隔符,冒号。自 1984 年以来,Mac 文件名中一直允许使用斜杠。Mac 用户还希望在 GUI 中看到冒号,而不是斜杠作为路径名分隔符(或者至少在 2001 年,当这种行为被制定时)。
【解决方案2】:

就我个人而言,我宁愿对这些文件运行批量重命名工具。文件名中的斜杠通常是个坏主意。

否则,答案是r'~/Desktop/Austin/Tweets/10_7_2012_12:09-Tweets.txt'。参看。 Special characters in OSX filename ? (Python os.rename)

【讨论】:

  • r 为前缀的原始字符串不需要为反斜杠转义。一个普通的字符串会。
  • @MarkRansom 好点。尽管 Python 似乎将斜杠解释为目录分隔符。
  • @MikhailKozhevnikov:Python 不应该解释 /,它应该将它传递给操作系统。 \/ 转义技巧的任何参考?
  • 米哈伊尔,您编辑的答案是正确的 - 我也能够从上面罗素的故障排除中推断出这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 2021-02-18
  • 2020-11-10
  • 2014-08-29
  • 2020-08-17
  • 2013-07-23
  • 2020-11-20
相关资源
最近更新 更多