您的问题源于您如何在C:\Dropbox\
. 当您使用 a\
时,它充当转义字符以将下一个字符从其字面意义中转义。因此,如果您想使用双引号创建一个字符串,该字符串本身包含双引号,您需要转义字符串中的所有双引号。
例如:
假设您想将字符串保存在变量中Alice told Bob "Mallory knows what we're up to"
。
如果你把它放在一个字符串中,如下所示:
myStr = "Alice told Bob "Mallory knows what we're up to""
然后 Python 认为"Alice told Bob "
是一个字符串,然后不知道那里Mallory knows what we're up to
在做什么。因此,翻译会抱怨。
为了理解双引号是字符串本身的一部分,您应该将它们转义如下:
myStr = "Alice told Bob \"Mallory knows what we're up to\""
但是如果你想要 a\
作为你的字符串的一部分会发生什么呢?
然后你需要\
用另一个来逃避\
:
myStr = "this is a backslash: \\"
因此,当您尝试 open 时"C:\Dropbox\somefile"
,python 将其解释为具有两个转义序列:\D
and \s
,替换该字符串中这些转义序列的值并尝试打开结果文件名,该文件名在您的文件系统中不存在。要正确避免这种情况,您应该执行以下操作:
myfile = open("C:\\Dropbox\\somefile.txt")
但是,有时这可能难以阅读。因此,您可能希望使用原始字符串(以 为前缀r
)。原始字符串不会替换字符串中的转义序列:
myfile = open(r"C:\Dropbox\somefile.txt")
因此,r"C:\Dropbox\somefile.txt"
等价于"C:\\Dropbox\\somefile.txt"
关于您正在做的事情的另一条评论:在将文件os.path.join
路径的各个部分连接在一起时,您应该真正使用。而你会做
myfile = open('C:\\dropbox\\' + pL + file,'r')
你真的应该做
myfile = open(os.path.join("C:\\dropbox", pL, filename),'r')
最后一点:
不要命名您的变量file
或str
或list
或实际上任何其他内置类型 - 这会扰乱解释器的行为并在未来产生不需要的结果