【问题标题】:How to replace "\" with "/" in python?如何在python中用“/”替换“\”?
【发布时间】:2017-06-29 14:50:26
【问题描述】:

我有一个值path = V:\PRODUCTIONS\SC_02\SHOT_310\compRender\main\v003\2560x1440_exr\SC_02_SHOT_310_Compositing_main_v003.1001.exr,我需要用普通斜杠替换反斜杠。

使用.replace("\\",'/')normpath 给我:V:/PRODUCTIONS/SC_02/SHOT_310/compRender/main003�0x1440_exr/SC_02_SHOT_310_Compositing_main_v003.1001.exr

我发现我可以用“/v”替换“\v”并摆脱它,但“\256”给了我特殊字符,我无法搜索“\256”,因为该值在字符串根据文件而变化。

我也不能在字符串前面使用“r”,比如path=r"V:\PRODUCTIONS\SC_02\SHOT_310\compRender\main\v003\2560x1440_exr\SC_02_SHOT_310_Compositing_main_v003.1001.exr",因为我没有创建路径值,它被转发给我。

【问题讨论】:

  • 看起来你有一个字符串文字,因为\256 变成了
  • 路径变量从何而来?看起来反斜杠没有被转义。
  • 尝试使用原始字符串:r"..."。它将按字面意思处理反斜杠。
  • 您研究过 REGEX(正则表达式)格式吗?
  • 如果您与示例中使用的字符串保持一致,那么这个问题就不会那么混乱了。向我们展示一个实际证明问题的方法!

标签: python string path


【解决方案1】:

由于您从另一个不可修改的来源接收变量,因此该字符串已被转义。

现在,对于您的字符串,有两个地方会误解字符:\v\256

>>> path = 'V:\PRODUCTIONS\SC_02\SHOT_310\compRender\main\v003\2560x1440_exr\SC_02_SHOT_310_Compositing_main_v003.1001.exr'
>>> path
'V:\\PRODUCTIONS\\SC_02\\SHOT_310\\compRender\\main\x0b003®0x1440_exr\\SC_02_SHOT_310_Compositing_main_v003.1001.exr'
# ----------------------------------------------^-----^

好消息是,原始字符串是语法的一部分,而不是字符串的一部分。问题在于 python 解释你的字符串的方式。您可以做的一件事是查找这些有问题的符号并替换它们。这是处理大多数用例的 recipe 的修改版本:

def raw(text):
    escape_dict={'\a':r'\a',
        '\b':r'\b',
        '\c':r'\c',
        '\f':r'\f',
        '\n':r'\n',
        '\r':r'\r',
        '\t':r'\t',
        '\v':r'\v',
        '\'':r'\'',
        '\"':r'\"',
        '\0':r'\0',
        '\1':r'\1',
        '\2':r'\2',
        '\3':r'\3',
        '\4':r'\4',
        '\5':r'\5',
        '\6':r'\6',
        '\7':r'\7',
        '\8':r'\8',
        '\9':r'\9',
         '\256': r'\256'} # notice this line is the first 3 digits of the resolution

    for k in escape_dict:
        if text.find(k) > -1:
            text = text.replace(k, escape_dict[k])

    return text

此函数将用原始等效符号替换任何被误解的特殊符号。

如果你调用它之前定义的,你会得到:

>>> raw(path)   
 'V:\\PRODUCTIONS\\SC_02\\SHOT_310\\compRender\\main\\v003\\2560x1440_exr\\SC_02_SHOT_310_Compositing_main_v003.1001.exr'

您必须根据需要手动添加更多分辨率值。

【讨论】:

  • 我想我会选择这个,这是迄今为止最好的解决方案。谢谢!
猜你喜欢
  • 2020-10-23
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 2021-10-25
  • 2012-03-18
相关资源
最近更新 更多