在Python的非字符串文字中处理反斜杠字符

0 投票
2 回答
637 浏览
提问于 2025-04-15 19:41

我有一个从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)

撰写回答