【问题标题】:Split and rejoin path without trailing backslash拆分和重新加入路径,没有尾随反斜杠
【发布时间】:2015-10-08 18:57:20
【问题描述】:

Python 新手,当我 Frankensplice* 一条路径时,我会选择一个额外的反斜杠。不知道为什么。我知道它在原始状态下打印为“\”。这发生在 Windows 机器上。

*(拆分后重新组合)

这就是我所拥有的

import os

f = "C:\\Gwen\\Stefani\\This is bananas.txt"

fname, ext = os.path.splitext(f)
head, tail = os.path.split(fname)

# strip last slash
tail = tail.rstrip("\\")

print ("%r" % (f))    # 'C:\\Gwen\\Stefani\\This is bananas.txt'
print ("%r" % (head)) # 'C:\\Gwen\\Stefani'
print ("%r" % (tail)) # 'This is bananas'
print ("%r" % (ext))  # '.txt'

# join them again
r = os.path.join(head, tail, ext)
print ("%r" % (r)) # 'C:\\Gwen\\Stefani\\This is bananas\\.txt'

【问题讨论】:

  • 你的预期输出是什么?
  • @holroy 我实际上是在调试东西,有一个函数可以改变文件名的大小写,我没有在这里包含。至于结果?我希望以我开始的方式结束,f == r。

标签: file python-2.7 path split


【解决方案1】:

os.path.split 拆分“路径\文件”时,所有的反斜杠都被删除,所以不需要做tail.rstrip("\\")

此外,在将它们添加回来以获得相同的文本时,您需要执行以下操作:

r = os.path.join(head, tail, fname + ext)

这是因为os.path.join 加入了路径元素,并且不可能知道您突然只引入了文件名的一部分(.ext)。换句话说,您需要在加入完整的文件路径之前连接文件名。 (这与您需要使用 splitext 拆分文件名的相反...)

【讨论】:

    【解决方案2】:

    来自os.path.join(path,*paths) 的文档: 返回值是 path 和 *paths 的任何成员的串联,在每个非空部分(除了最后一个)之后恰好有一个一个目录分隔符 (os.sep),这意味着结果只会以 a 结尾如果最后一部分为空,则分隔符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 2020-05-20
      • 2012-11-16
      • 2012-08-30
      相关资源
      最近更新 更多