为什么重命名不起作用?

时间:2015-01-14 18:54:43

标签: python string escaping

以下目录的重命名命令可以正常工作

os.rename("4\347\357\344","newname")

然而,这个失败了,告诉"没有这样的文件或目录"

xxx = "4\%d\%d\%d" % (347, 357, 344)
os.rename(xxx, "newname")

我也试过跟随它失败了

xxx = "4" + "\\" + str(int(s1)) + "\\" + str(int(s2)) + "\\" + str(int(s3))

如果我打印,最后两种方法是构造与第一个文字相同的字符串。那他们为什么不工作?

2 个答案:

答案 0 :(得分:3)

第二个例子没有逃脱: "4\%d\%d\%d" % (347, 357, 344)会产生4\\347\\357\\344

第一个做,产生4\xe7\xef\xe4

最后一个也没有逃脱。

<强>更新 要获得您正在寻找的结果,请尝试

'4'+''.join([chr(int(str(z),8)) for z in [347, 357, 344]])

答案 1 :(得分:0)

"4\347\357\344"

此文字包含转义的八进制序列。其他字符串没有并且不同。

>>> s1 = "4\347\357\344"
>>> s2 = "4\%d\%d\%d" % (347, 357, 344)
>>> print s1 == s2
False
>>> print repr(s1)
'4\xe7\xef\xe4'
>>> print repr(s2)
'4\\347\\357\\344'

如您所见,s1s2不相等。至于s1的表示,八进制347等于十六进制e7。等等。

总之,os.rename有效,但您的字符串不同。