我正在尝试使用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)
答案 0 :(得分:1)
r
不是一个适用于字符串对象的函数,它是一个适用于字符串文字的修饰符。它改变了文字被解释为值的方式。但是一旦完成,该值只是一个普通的旧字符串值。特别是:
>>> a = '\n'
>>> b = '''
... '''
>>> a == b
True
因此,如果a
和b
的值相同,那么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
前缀仅适用于字符串文字。