【问题标题】:Python Convert Windows File path in a variablePython在变量中转换Windows文件路径
【发布时间】:2018-10-01 14:34:23
【问题描述】:

Given 是一个包含 windows 文件路径的变量。然后我必须去阅读这个文件。这里的问题是路径包含转义字符,我似乎无法摆脱它。我检查了 os.path 和 pathlib,但都已经期望正确的文本格式,我似乎无法构造。

例如这个。请注意,给出了 fPath,所以我不能在它的前面加上 r 作为原始路径。

#this is given, I cant rawpath it with r 
fPath = "P:\python\t\temp.txt"

file = open(fPath, "r")
for line in file:
    print (line)

如何通过以下函数或方法打开 fPath:

"P:\python\t\temp.txt"

"P:/python/t/temp.txt"

我试过也试过 .replace("\","/"),还是不行。

我为此使用 Python 3.7。

【问题讨论】:

  • "P:\python\t\temp.txt".replace("\\", "/") 适合我!
  • 我使用了替换(“\\\”,“/”)。在这里写的时候甚至被转义了。
  • @Fourier,对我来说不是。这就是我得到的:OSError: [Errno 22] Invalid argument: 'P:/python\t\temp.txt'
  • 能否粘贴 temp.txt 属性中的路径
  • @AlbinPaul 如果我明白你在问什么:文件的属性窗口列出了这个Location: P:\python\t

标签: python python-3.x


【解决方案1】:

您可以使用os.path.abspath()进行转换:

print(os.path.abspath("P:\python\t\temp.txt"))

>>> P:/python/t/temp.txt

请参阅documentation of os.path here

【讨论】:

  • OSError: [Errno 22] Invalid argument: 'P:\\python\t\temp.txt' 不走运。这是我得到的错误。 ://
  • 啊,字符串是从哪里来的?
  • 来自另一个包含 windows 文件路径的 .txt。它起到了我工作的工作清单的作用。对于这里的问题,这个文件是不可编辑的,也不能改变。我收到 Windows 样式的文件路径并且必须处理它。无法修改源代码。
【解决方案2】:

您可以使用pathlib 库中的路径函数。

from pathlib import Path

docs_folder = Path("some_folder/some_folder/")
text_file = docs_folder / "some_file.txt"
f = open(text_file)

【讨论】:

  • 这需要正确格式的路径。我试过这个:docs_folder = Path("P:\python\t\temp.txt") f = open(docs_folder) for line in f: print (line) 得到了这个:OSError: [Errno 22] Invalid argument: 'P:\\python\t\temp.txt'
  • 使用 Path(r'P:\python\t\temp.txt') 代替它。
  • 我在原问题中特别提到了这个案例。我无法控制路径原点。我得到了一个带有 Windows 样式路径的变量。对此我无能为力。源数据必须采用这种格式。
  • 这些都不适用于 Windows 路径。他们都希望前向斜杠作为输入。
【解决方案3】:

我已经解决了。

问题在于 python 解释器。 \t 和所有其他数据不作为此类数据存在,而是对非打印字符的解释。

所以我有点幸运,其他人已经遇到了同样的问题,并用一种​​蛮力的方法解决了它:

http://code.activestate.com/recipes/65211/

我只需要找到它。

之后我有了一个没有转义字符的原始字符串,只需要对其运行简单的 replace() 即可获得可行的路径。

【讨论】:

    【解决方案4】:

    如果你想替换然后做

    replace("\\","/")

    【讨论】:

    • 我是来写这个的。
    • 我试过了,但 Stackoverflow 决定避开第一个反斜杠。
    • @RedBoxes - 尝试先将其转换为字符串 str(fPath).replace("\\","/")
    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2019-01-08
    相关资源
    最近更新 更多