前一阵有看到这个问题,可惜找不到了,就再来求安利一下~
情况是这样的,有个文件文件名为'\u5feb\u901f\u4e0a\u4f20'
然后我用os.listdir('.')
显示的时候它自动给反斜杠转义了,就成了'\\u5feb\\u901f\\u4e0a\\u4f20'
那么问题来了,怎样把双斜杠替换为单斜杠?
我尝试用字符串的 replace ,可是a.replace('\\', '\')
会因为反斜杠把单引号转义了而找不到字符串结束符报错,用a.replace(r'\\', r'\')
也不行。
有什么好方法可以助我目标达成吗?
name = '\\u5feb' name[0] = '\\'
也就是说'\\u5feb'
中第一个反斜杠不是字符串的一部分,而是用于转义第二个反斜杠的。
所以一开始我的思路就不对了,不应该用 replace 去找第一个反斜杠因为它根本就不存在,而应该用 decode('unicode_escape')
来解决。
![]() | 1 RickyBoy 2015-11-07 03:53:00 +08:00 decode('unicode_escape') 直接显示中文不好么 |
![]() | 2 RickyBoy 2015-11-07 05:06:12 +08:00 接楼上,如果文件名本身就是 '\u5feb\u901f\u4e0a\u4f20' 的话, os.listdir 输出的列表肯定是 '\\u5feb\\u901f\\u4e0a\\u4f20' 的形式的, for 一下单独显示字符串的话就没有了 |
![]() | &bsp; 3 Sylv 2015-11-07 06:52:24 +08:00 via iPhone >>> name = '\u5feb\u901f\u4e0a\u4f20' >>> print name \u5feb\u901f\u4e0a\u4f20 >>> print repr(name) '\\u5feb\\u901f\\u4e0a\\u4f20' >>> print [name] ['\\u5feb\\u901f\\u4e0a\\u4f20'] >>> print [name][0] \u5feb\u901f\u4e0a\u4f20 |
![]() | 4 binux 2015-11-07 07:04:25 +08:00 ![]() 这是一个 XY 问题 |
5 jimzhong 2015-11-07 08:12:20 +08:00 为什么要转啊?你看到的是转义后的字符串。 |
![]() | 6 des 2015-11-07 08:19:47 +08:00 3.4 >>> name = '\u5feb\u901f\u4e0a\u4f20' >>> >>> print name SyntaxError: Missing parentheses in call to 'print' >>> print(name) 快速上传 |
![]() | 7 p1n3 2015-11-07 11:00:09 +08:00 python2.7 >>> print u'\u5feb\u901f\u4e0a\u4f20' 快速上传 >>> print '\\' \ |
![]() | 9 Kisesy 2015-11-07 12:50:14 +08:00 其实在程序内部是单斜杠,只是给你显示为双斜杠 |
![]() | 11 YaphetYin OP |
![]() | 12 overvenus 2015-11-07 13:24:58 +08:00 ~ python3 Python 3.4.3 (default, Oct 14 2015, 20:28:29) [GCC 4.8.4] on linux Type "help", "copyright", "credits" or "license" for more information. >>> name = """\u5feb\u901f\u4e0a\u4f20""" >>> print(name) 快速上传 >>> print(repr(name)) '快速上传' >>> name = r"""\u5feb\u901f\u4e0a\u4f20""" >>> print(name) \u5feb\u901f\u4e0a\u4f20 >>> |
![]() | 13 fyyz 2015-11-07 13:51:48 +08:00 |