在Python中使用分隔符"\"拆分字符串

0 投票
3 回答
2509 浏览
提问于 2025-04-18 06:58

我需要用分隔符“\”来分割一个字符串。这个字符串可能有以下几种格式:

  1. file://C:\Users\xyz\filename.txt
  2. C:\Users\xyz\filename.txt

我希望我的脚本能输出“filename.txt”。我尝试使用 split('\\\\'),但是没有成功。请问用哪个函数更好呢?

3 个回答

0

试试下面的步骤,注意在字符串中使用\的正确格式,这样可以避免出现\x范围错误

>>> file = 'file://C:\\Users\\xyz\\filename.txt'
>>> file.split('\\')[-1]
'filename.txt'

>>> file = 'C:\\Users\\xyz\\filename.txt'
>>> file.split('\\')[-1]
'filename.txt'
0

假设你的字符串是 pathName,那么你可以用 fileName = pathName.split('\\')[-1] 这段代码来获取文件名。

1

这里有两个问题。

路径分割

通常你会用 os.path.split 来处理路径:

>>> import os.path
>>> p=r'C:\Users\xyz\filename.txt'
>>> head, tail = os.path.split(p)
>>> head
'C:\\Users\\xyz'
>>> tail
'filename.txt'

需要注意的是:os.path 是根据你所用操作系统的路径格式来工作的。如果你确定要处理的是Windows的路径(即使你的程序是在Linux或OSX上运行),那么你应该使用 ntpath 模块,而不是 os.path请查看说明

说明:由于不同操作系统有不同的路径命名规则,标准库中有几个版本的这个模块。os.path 模块总是适用于Python运行的操作系统,因此可以用于本地路径。不过,如果你想处理始终以某种特定格式的路径,你也可以导入并使用各个独立的模块。它们都有相同的接口:

  • posixpath 用于UNIX风格的路径
  • ntpath 用于Windows路径
  • macpath 用于旧版MacOS路径
  • os2emxpath 用于OS/2 EMX路径

格式支持

你需要支持两种格式:

  1. file://C:\Users\xyz\filename.txt
  2. C:\Users\xyz\filename.txt

第二种是普通的Windows路径,而第一种……老实说,我也不知道那是什么。它看起来有点像文件URI,但使用的是Windows风格的分隔符(反斜杠)。这有点奇怪。当我在Windows的Chrome中打开一个PDF时,URI看起来是不同的:

file:///C:/Users/kos/Downloads/something.pdf

我假设你感兴趣的就是这种格式。如果不是,那我就不太能保证你在处理什么了,你可以根据自己的判断来理解它(去掉 file:// 前缀,把它当作Windows路径处理?)。

你可以使用 urlparse 模块(在Python 3中请查看 urllib.parse)将URI分割成有意义的部分,一旦你提取了URI的路径部分,你可以直接用 .split('/') 来分割它(URI的语法简单到可以这样做)。如果你在 file:// URI上使用这个模块,会发生以下情况:

>>> r = urlparse.urlparse(r'file:///C:/Users/xyz/filename.txt')
>>> r 
ParseResult(scheme='file', netloc='', path='/C:/Users/xyz/filename.txt', params='', query='', fragment='')
>>> r.path
'/C:/Users/xyz/filename.txt'
>>> r.path.lstrip('/').split('/')
['C:', 'Users', 'xyz', 'filename.txt']

请阅读这个URI方案描述,以更好地了解这种格式的样子,以及为什么在 file: 后面有三个斜杠。

撰写回答