在Python中替换'\ x ..'litteral字符串

时间:2017-02-24 16:26:43

标签: python linux

我的目录包含'\ 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替换这些字符?

编辑: 为了理解char,当我将ls传递给xxd时,'\'字符出现在ascii表示中。在十六进制中,它显示'5c'

2 个答案:

答案 0 :(得分:2)

string.replace对我有用:

dir = r'foo\x00bar'
print dir
dir.replace(r'\x00', '')
print dir

输出是:

foo\x00bar
foobar
  

<强> string.replace(s, old, new[, maxreplace])

     

返回字符串s的副本,其中所有出现的substring old都替换为new。如果给出了可选参数maxreplace,则替换第一个maxreplace事件。

正则表达式也适用于一般情况,但您必须转义反斜杠,以便\x本身不被解释为正则表达式转义。

对于删除\x后跟两个十六进制数字的一般情况:

import re
dir = r'foo\x1Dbar'
print dir
re.sub(r'\\x[0-9A-F]{2}', '', dir)
print dir

输出是:

foo\x1Dbar
foobar

答案 1 :(得分:2)

这个解释器会话应该显示你的dirname中有一个实际的空字符,而后面跟一个x后跟两个0的差异。

>>> bad_dir_name = "c\x00mb"
>>> bad_dir_name
'c\x00mb'
>>> good_dir_name = bad_dir_name.replace("\x00", "")
>>> good_dir_name
'cmb'
>>>
>>> bad_dir_name2 = "c\\x00mb"
>>> bad_dir_name2
'c\\x00mb'
>>> good_dir_name2 = bad_dir_name2.replace("\\", "") # remove the backslash
>>> good_dir_name2
'cx00mb'

在任何一种情况下,string.replace都是可行的方法。

相关问题