为什么向Python的set中添加相对路径字符串时反斜杠数量会增加?
问题原因解析
1. 你手动赋值的字符串和input获取的字符串根本不是同一个内容
Python中直接写在代码里的带引号的内容叫字符串字面量,默认会自动解析转义字符:你写的".\train.csv"里的\t会被当成制表符转义序列,最终得到的字符串里根本不存在反斜杠,实际内容是「. + 制表符 + rain.csv」。
而input()函数会原样接收你输入的所有字符,不会做任何转义解析,你输入.\train.csv得到的字符串内容就是「. + 反斜杠 + t + rain.csv」,和你手动写的字面量完全不一样。
如果要手动写出和input输入完全相同的字符串,需要用原始字符串写法:r".\train.csv",或者手动转义反斜杠:".\\train.csv"。
2. 打印容器和打印单个字符串的规则不一样
Python打印list、set这类容器对象时,会输出容器内每个元素的repr()结果,而不是普通的str()结果:
str()是给人读的友好展示,字符串里的单个反斜杠会直接显示为\repr()是Python对象的官方表示,输出的内容可以直接复制到代码里当合法的字符串字面量使用,所以会自动把字符串里的反斜杠转义成\\,避免被当成转义序列解析
你看到的set输出里的双反斜杠,只是repr()的展示效果,字符串实际存储的还是单个反斜杠,不会影响实际使用。
验证示例
你可以运行下面的代码对比结果:
# 手动写原始字符串,和input输入的内容完全一致 set_0 = set() set_0.add(r".\train.csv") print(set_0) # 输出为 {'.\\train.csv'},和input场景的输出完全相同
内容的提问来源于stack exchange,提问作者konsulrima
相关产品推荐
相关产品推荐

