我的目录包含“\x..”字符,例如“\x00”:
#ls
c\x00mb
我想把它们去掉,因为当我把这些文件复制到windows时,它们就不能用了,所以我的python脚本会遍历这些目录,用下面的方法检测有问题的字符:
if '\\x' in dir: # dir is the name of the current directory
首先我想我可以通过使用python中的re
模块来解决这个问题:
new_dir_name = re.sub('\x00', r'', dir) # I am using \x00 as an example
但是这个方法不起作用,有没有办法用python替换这些字符?
编辑:为了理解字符,当我用管道将ls
传输到xxd
时,“\”字符出现在ASCII表示中。在十六进制中显示为“5c”
3条答案
按热度按时间mepcadol1#
string.replace对我很有效:
输出为:
一月一日
返回字符串s的一个副本,其中所有出现的子字符串old都被new替换。如果给定可选参数maxreplace,则替换出现的第一个maxreplace。
正则表达式也可以用于一般情况,但是您必须转义反斜杠,这样
\x
本身就不会被解释为正则表达式转义。对于删除后跟两个十六进制数字的
\x
的一般情况:输出为:
8zzbczxx2#
这个解释器会话应该显示目录名中实际包含一个空字符与包含一个backlash后跟一个
x
后跟两个0
之间的区别。无论哪种情况,
string.replace
都是可行之道。oprakyz73#
\x
表示十六进制字符转义。tavnab提供的答案对我不起作用。
原因是
string.replace
不是一个inplace方法,而且,在Python 3中,print
函数需要括号,所以,更新后的答案应该是:其然后实际上产生以下输出: