【问题标题】:How to correctly decode window path in python如何在python中正确解码窗口路径
【发布时间】:2020-05-19 13:56:56
【问题描述】:

我有一个关于在 python 中正确解码窗口路径的问题。我在网上尝试了几种方法,但没有找到解决方案。我将路径(文件夹目录)分配给一个变量,并希望将其读取为原始变量。但是,有 '\' 与数字结合,python 无法正确读取,有什么建议吗?谢谢

fld_dic = 'D:TestData\20190917_DT19_HigherFlowRate_StdCooler\DM19_Data'

我想要:

r'D:TestData\20190917_DT19_HigherFlowRate_StdCooler\DM19_Data'

我试过了: fr'{fld_dic}' 它给了我答案:'D:TestData\x8190917_DT19_HigherFlowRate_StdCooler\\DM19_Data' 这不是我想要的。知道如何将“\”和数字相结合的分配变量更改为原始字符串吗? 谢谢

【问题讨论】:

  • 在 \ 之前加上 / ,例如 /\
  • 非常感谢您的帮助。然而,这不是我要找的答案。我的问题是当我将包含反斜杠和数字组合(如“\202”)的窗口路径分配给函数中的参数时。解析器会自动将 '\201' 更改为 '\x81' utf 代码。有没有办法阻止解析器在分配期间更改它?假设我只是直接复制窗口路径并将其分配给函数参数。比如 def fcn(path= 'C:\202\data'): 例如。谢谢。

标签: python windows path


【解决方案1】:

问题的根源是字符串分配。当您像这样分配path='c:\202\data' 时,python 根据默认的 UNICODE 对该字符串进行编码。您需要更改分配。你必须 assige 作为原始字符串。也像这种路径使用不是最佳实践。它将不断发生。不符合 PEP8

不应将路径变量用作字符串。它将破坏python跨平台的优势。

您应该使用 pathlib 或 os.path。我推荐路径库。它有纯windows和linux路径。同样在获取路径时使用此路径。如果您从中获取路径并输入,您可以将其作为原始文本读取并转换为 pathlib 实例。

检查此链接: https://docs.python.org/3/library/pathlib.html

它有效,但不是最佳实践。只需将路径分配替换为原始字符串/

import os

def fcn(path=r'C:\202\data'):
    print(path)
    os.chdir(path)

fcn()

【讨论】:

  • 感谢您的帮助。我仍然不太清楚在这里做什么。希望您会使用 pathlib 提供答案。我只是想用windows path def fnc(fld_dic)的输入参数定义一个函数。然后在函数内部,我想使用 os.listdir(fld_dic) 在列表中列出该目录的所有文件。 fld_dic 是上面的目录。它一直给我错误,因为 \201 将变为 \x81。你能告诉我如何实现这一目标吗?顺便说一句,我也不明白为什么 \201 变成 \x81。我虽然 \x81 是'129'的str。谢谢。
  • 我在答案中添加了示例代码。希望能帮到你,
  • 非常感谢您的帮助。然而,这不是我要找的答案。我的问题是当我将包含反斜杠和数字组合(如“\202”)的窗口路径分配给函数中的参数时。解析器会自动将 '\201' 更改为 '\x81' utf 代码。有没有办法阻止解析器在分配期间更改它?假设我只是直接复制窗口路径并将其分配给函数参数。比如 def fcn(path= 'C:\202\data'): 例如。谢谢。
  • 如果你想像 def fcn(path= 'C:\202\data') 这样使用它是不可能的,因为 `` 这是转义字符。转义字符是元字符的一种特殊情况。你应该改变你的代码。 def fcn(path= 'C:\202\data'.encode('unicode_escape')) 那样。 [类似话题](stackoverflow.com/a/13967409/10972883)
  • 谢谢。但还有一个问题。是否可以在函数内部对变量“路径”进行编码?比如 def fcn(path = 'C:\202\data'): 然后在函数里面放一些类似 path_encode = path.encode('unicode_escape') 我的理解是这是不可能的。分配给变量后,解析就已经完成了。您介意帮助确认我的理解是否正确吗?谢谢
猜你喜欢
  • 2022-01-17
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 2021-11-17
相关资源
最近更新 更多