使用变量字符串时使用原始文字表示

时间:2013-11-28 20:28:09

标签: python string-literals

我正在尝试使用for循环将不同源文件夹中的文件复制到同一目标文件夹中。我喜欢使用文字表示来避免文件路径中出现多个反斜杠的问题。我找不到获得变量的文字表示的正确方法。任何提示将不胜感激。代码如下:

import shutil
destination_folder=DF

for i in range (1,3):
    new_folder='folder_'+str(i)
    new_path=os.path.join('C:\foo', new_folder, file_to_copy)
    source_file= r(new_path)                #WRONG
    destination= r(destination_folder)      #WRONG
    shutil.copy(source_file, destination)

2 个答案:

答案 0 :(得分:1)

r不是一个适用于字符串对象的函数,它是一个适用于字符串文字的修饰符。它改变了文字被解释为值的方式。但是一旦完成,该值只是一个普通的旧字符串值。特别是:

>>> a = '\n'
>>> b = '''
... '''
>>> a == b
True

因此,如果ab的值相同,那么Python怎么可能知道您要将其转换为r'\n'

就此而言,想象一下:

>>> c = sys.stdin.readline()

>>> c == a
True

或者这个:

>>> d = chr(10)
>>> d == a

b c中,它不会返回并将字符串文字重新解释为原始字符串,它将保持不变,并且在d和{{1}中首先没有字符串文字。


如果要在字符串值中转义所有特殊字符,而不关心它们来自哪里,可以通过让Python转义字符串来实现。例如:

>>> e = a.encode('unicode-escape').decode('ascii')

但是你肯定不想这样做来构建文件名以传递给shutil.copy函数。


如果代码中有字符串文字,并且希望将其视为原始字符串文字,只需将其写为原始字符串文字即可。所以:

new_path=os.path.join(r'C:\foo', new_folder, file_to_copy)
source_file= new_path
destination= destination_folder

你可以手动转义文字中的反斜杠,或者使用正斜杠而不是反斜杠等。但是这些都是你在用Python评估之前到文字所做的一切,而不是<事后,em>到字符串。

答案 1 :(得分:0)

变量字符串的“文字表示”的概念并不真正有意义。

如果您有一个名为new_path的变量,则此变量的值只是一个字符串值。 r前缀仅适用于字符串文字。