【问题标题】:Concatenate backslash on python在python上连接反斜杠
【发布时间】:2014-04-01 16:53:24
【问题描述】:

我是 python 新手,如果这听起来很简单,请原谅我。我想加入一些变量来产生路径。像这样:

AAAABBBBCCCC\2\2014_04\2014_04_01.csv

Id + '\' + TypeOfMachine + '\' + year + '_' + month + '\' + year + '_' + month + '_' + day + '.csv'

我如何连接它?我在下划线或反斜杠周围加上了单引号,但 stackoverflow 省略/修改了它们。

【问题讨论】:

  • 似乎有多种方法可以解决这个问题,但我最终使用了 kojiro 的修改建议:r'{}\{}'.format('hi', 'bye') 谢谢大家!

标签: python concatenation backslash


【解决方案1】:

反斜杠通常用于转义特殊字符串。例如:

>>> print "hi\nbye"
hi
bye

告诉 Python 不要将斜杠视为特殊字符通常就像使用“原始”字符串一样简单,可以通过在字符串前面加上字母 'r' 将其写为 string literal

>>> print r"hi\nbye"
hi\nbye

然而,即使是原始字符串也不能以奇数个反斜杠结尾。这使得字符串连接变得困难。

>>> print "hi" + r"\" + "bye"
File "<stdin>", line 1
print "hi" + r"\" + "bye"
                       ^
SyntaxError: invalid syntax

有几种方法可以解决这个问题。最简单的是使用字符串格式:

>>> print r'{}\{}'.format('hi', 'bye')
hi\bye

另一种方法是在常规字符串中使用双反斜杠来将第二个反斜杠与第一个反斜杠一起转义:

>>> print 'hi' + '\\' + 'bye'
hi\bye

但所有这些都假设您正面临使用反斜杠的合法需求。如果您只想构建 Windows 路径表达式,只需使用 os.path.join

【讨论】:

    【解决方案2】:

    通常,你会加倍反斜杠:

    '\\'
    

    使用os.path.join() 连接目录和文件名元素,其余部分使用字符串格式:

    os.path.join(Id, TypeOfMachine, '{}_{}'.format(year, month), 
                 '{}_{}_{}.csv'.format(year, month, day))
    

    让 Python 为您使用适合您平台的正确目录分隔符。这样做的好处是您的代码变得可移植;它也可以在 Windows 以外的操作系统上运行。

    通过使用字符串格式,您还可以处理任何非字符串参数;例如,如果yearmonthday 是整数。

    【讨论】:

    • +1 format 这里负责转换您的数据类型。例如,您不能在 ints 上使用 os.path.join
    【解决方案3】:

    您应该使用os.path.join 来构造路径。

    例如:

    import os
    path = os.path.join(Id, TypeOfMachine, year + '_' + month, year + '_' + month + '_' + day + '.csv')
    

    或者如果你坚持使用反斜杠,你需要转义它们:as, so '\\'

    【讨论】:

      【解决方案4】:

      您可以简单地通过其 ASCII 代码来调用该字符。 (我使用的是 Python 3.7)。

      示例:

      此时ASCII码为92,可以使用Python's chr() function来调用字符

      this website 中,您可以找到更多可打印字符的 ASCII 代码列表。

      上面使用的代码:

      delimiter = chr(92)
      
      FileName = 'Id' + delimiter + 'TypeOfMachine' + delimiter + 'year' + '_' + 'month' + delimiter + 'year' + '_' + 'month' + '_' + 'day' + '.csv'
      
      print(FileName)
      

      希望对你有帮助。

      【讨论】:

        【解决方案5】:

        如果不导入 os.path 模块,您可以简单地这样做:

         my_path = '\\'.join([Id,TypeOfMachine, year + '_' + month, year + '_' + month + '_' + day + '.csv'])
        

        【讨论】:

          【解决方案6】:

          您也可以使用普通字符串,例如:

          Id + '/' + TypeOfMachine + '/' + year + '_' + month + '/' + year + '_' + month + '_' + day + '.csv'
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-06-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-16
            相关资源
            最近更新 更多