如何摆脱python windows文件路径字符串中的双反斜杠? [复制]
Posted
技术标签:
【中文标题】如何摆脱python windows文件路径字符串中的双反斜杠? [复制]【英文标题】:How to get rid of double backslash in python windows file path string? [duplicate] 【发布时间】:2012-08-09 02:46:48 【问题描述】:我有一本字典:
my_dictionary = "058498":"table", "064165":"pen", "055123":"pencil"
我遍历它:
for item in my_dictionary:
PDF = r'C:\Users\user\Desktop\File_%s.pdf' %item
doIt(PDF)
def doIt(PDF):
part = MIMEBase('application', "octet-stream")
part.set_payload( open(PDF,"rb").read() )
但我收到此错误:
IOError: [Errno 2] No such file or directory: 'C:\\Users\\user\\Desktop\\File_055123.pdf'
它找不到我的文件。为什么它认为文件路径中有双反斜杠?
【问题讨论】:
只有一个反斜杠。您正在看到字符串表示形式。该文件不存在。 双反斜杠没有错,python以用户的方式打印/表示它。如果a = r'raw s\tring'
和b = 'raw s\\tring'
(没有'r' 和显式双斜杠),那么它们都表示为'raw s\\tring'
。
【参考方案1】:
双反斜杠没有错,python 代表它对用户的方式。在每个双反斜杠\\
中,第一个转义第二个以暗示实际的反斜杠。如果 a = r'raw s\tring'
和 b = 'raw s\\tring'
(没有 'r' 和显式双斜杠),则它们都表示为 'raw s\\tring'
。
>>> a = r'raw s\tring'
>>> b = 'raw s\\tring'
>>> a
'raw s\\tring'
>>> b
'raw s\\tring'
为了澄清,当您 打印 字符串时,您会看到它会被使用,就像在路径中一样 - 只有一个反斜杠:
>>> print(a)
raw s\tring
>>> print(b)
raw s\tring
在这个打印字符串的情况下,\t
并不意味着 制表符,它是一个反斜杠 \
后跟字母 't'。
否则,没有'r'前缀和单个反斜杠的字符串会转义字符之后,使其评估它后面的't' == tab:
>>> t = 'not raw s\tring' # here '\t' = tab
>>> t
'not raw s\tring'
>>> print(t) # will print a tab (and no letter 't' in 's\tring')
not raw s ring
所以在PDF路径+名称中:
>>> item = 'xyz'
>>> PDF = r'C:\Users\user\Desktop\File_%s.pdf' % item
>>> PDF # the representation of the string, also in error messages
'C:\\Users\\user\\Desktop\\File_xyz.pdf'
>>> print(PDF) # "as used"
C:\Users\user\Desktop\File_xyz.pdf
有关escape sequences in the table here 的更多信息。另见__str__
vs __repr__
。
【讨论】:
没有d
:'C:\\Users\\user\\Desktop\\File_055123.pdf'
现在可能被删掉了。
抱歉,这不是一个有用的答案。因此,如果是双斜线,那么如何解决它????
@DeeWBee 添加了一些关于转义序列和 str 与 repr 的说明。
@DeeWBee:你没有。没有什么可以修复的。已经好了。【参考方案2】:
alwbtc@ 我敢说:“我发现了这个错误……”
替换
PDF = r'C:\Users\user\Desktop\File_%s.pdf' %item
doIt(PDF)`
与
for item in my_dictionary:
PDF = r'C:\Users\user\Desktop\File_%s.pdf' % mydictionary[item]
doIt(PDF)`
事实上,您确实在寻找 File_pencil.pdf(不是 File_055123.pdf)。 您正在滑动索引字典而不是其内容。 这个论坛主题可能会产生副作用。
【讨论】:
【参考方案3】:您也可以使用其他斜线来避免头痛。 如果你知道我在说什么。相反的斜线。
你现在正在使用
PDF = 'C:\Users\user\Desktop\File_%s.pdf' %item
尝试使用 **
PDF = 'C:/Users/user/Desktop/File_%s.pdf' %item
** 它不会被视为转义字符。
【讨论】:
【参考方案4】:双反斜杠是由于r
,原始字符串:
r'C:\Users\user\Desktop\File_%s.pdf' ,
使用它是因为\
可能会转义某些字符。
>>> strs = "c:\desktop\notebook"
>>> print strs #here print thinks that \n in \notebook is the newline char
c:\desktop
otebook
>>> strs = r"c:\desktop\notebook" #using r'' escapes the \
>>> print strs
c:\desktop\notebook
>>> print repr(strs) #actual content of strs
'c:\\desktop\\notebook'
【讨论】:
在上面的例子中,如果你像>>> strs
一样显示strs
,你应该得到c:\\desktop\\notebook
。打印不显示转义,即双斜杠 \\【参考方案5】:
它没有。双反斜杠只是计算机说反斜杠的方式。是的,我知道这听起来很奇怪,但是这样想——为了表示特殊字符,选择了反斜杠作为转义字符(例如,\n 表示换行符,而不是反斜杠字符后跟 n 字符)。但是,如果您确实想打印(或使用)一个反斜杠(可能后跟更多字符),但又不希望计算机将其视为转义字符,会发生什么?在这种情况下,我们将反斜杠本身转义,这意味着我们使用双反斜杠,以便计算机能够理解它是单反斜杠。
由于您在字符串之前添加了r
,它会自动完成。
【讨论】:
以上是关于如何摆脱python windows文件路径字符串中的双反斜杠? [复制]的主要内容,如果未能解决你的问题,请参考以下文章