前一阵有看到这个问题,可惜找不到了,就再来求安利一下~
情况是这样的,有个文件文件名为'\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 一下单独显示字符串的话就没有了
|
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 1
这是一个 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
|