在Python的非字符串文字中处理反斜杠字符
我有一个从XML元素读取的字符串,这个字符串被赋值给一个叫做filename的变量。我不知道怎么更清楚地表达这一点,因为说filename = 下面的字符串,可能会让人误以为我有一个字符串常量。
\\server\data\uploads\0224.1307.Varallo.mov
当我尝试把这个传递给
os.path.basename(filename)
时,我得到了以下结果
\\server\\data\\uploads\x124.1307.Varallo.mov
我试过用filename.replace('\\','\\\\'),但这也不行。然后os.path.basename(filename)返回了以下内容。
\\\\server\\data\\uploads\\0224.1307.Varallo.mov
注意到\0现在没有被转换成\x,但现在这个字符串根本没有被处理。
我该如何处理我的filename变量,让这个字符串处于正确的状态,以便os.path.basename()能真正给我返回文件名?我在使用OSX,所以uncpath的东西不可用。
所有手动将\替换为\\的尝试都失败了,因为\0在文件名的开头被转换成了\x。
注意:这不是一个字符串常量,所以r''不适用。
2 个回答
1
无论你收到多少个踩,事实是你做错了。os.path
是用来处理本地路径的。\\foo\bar\baz
不是 OS X 的路径,而是 Windows 的 UNC 路径。posixpath
不能处理 UNC 路径;而 ntpath
可以。
2
我们需要更多的信息。变量filename里面到底是什么?要回答这个问题,可以使用 print repr(filename)
这个命令,然后把结果加到你上面的提问里。
大胆猜测
免责声明:这只是一个猜测 - 可以试试:
import ntpath
print ntpath.basename(filename)