为什么重命名不起作用?

Why rename doesn't work?

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

os.rename("4774","newname")

然而,这个失败了,告诉"No such file or directory"

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

我也试过跟随失败

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

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

第二个例子没有转义: "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]])

"4774"

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

>>> s1 = "4774"
>>> 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 有效,但您的字符串不同。