【发布时间】:2014-05-19 07:29:50
【问题描述】:
我需要使用分隔符“\”分割字符串 字符串可以是以下任何一种格式:
file://C:\Users\xyz\filename.txtC:\Users\xyz\filename.txt
我需要我的脚本将输出作为“filename.txt”
我尝试使用split('\\\\')。它行不通。哪个功能更好用?
【问题讨论】:
标签: python
我需要使用分隔符“\”分割字符串 字符串可以是以下任何一种格式:
file://C:\Users\xyz\filename.txtC:\Users\xyz\filename.txt我需要我的脚本将输出作为“filename.txt”
我尝试使用split('\\\\')。它行不通。哪个功能更好用?
【问题讨论】:
标签: python
假设你的字符串是pathName,那么你可以使用fileName = pathName.split('\\')[-1]。
【讨论】:
尝试以下步骤,注意在字符串中使用\的有效字符串格式,避免\x scope error
>>> file = 'file://C:\\Users\\xyz\\filename.txt'
>>> file.split('\\')[-1]
'filename.txt'
>>> file = 'C:\\Users\\xyz\\filename.txt'
>>> file.split('\\')[-1]
'filename.txt'
【讨论】:
这里有两个问题。
您通常使用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。 See the note:
注意由于不同的操作系统有不同的路径名约定,标准库中有这个模块的几个版本。 os.path 模块始终是适用于 Python 运行的操作系统的路径模块,因此可用于本地路径。但是,如果您想操作始终采用其中一种不同格式的路径,您也可以导入和使用各个模块。它们都有相同的界面:
- 用于 UNIX 样式路径的 posixpath
- Windows 路径的 ntpath
- 旧式 MacOS 路径的 macpath
- os2emxpath 用于 OS/2 EMX 路径
您有 2 种格式需要支持:
2 是正常的 Windows 路径,而 1 是...坦率地说,我不知道那是什么。它有点像file URI,但使用了 Windows 风格的分隔符(反斜杠)。这很奇怪。当我在 Windows 上的 Chrome 中打开 PDF 时,URI 看起来不同:
file:///C:/Users/kos/Downloads/something.pdf
我会假设这是您感兴趣的格式。如果不是,那么我无法保证您正在处理的内容,您可以对如何解释它做出一些有根据的猜测(删除 @987654331 @ 前缀并将其视为 Windows 路径?)。
您可以使用the urlparse module 将URI 拆分为有意义的部分(请参阅urllib.parse for python 3),一旦您提取了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']
请阅读this URI scheme description 以更好地了解这种格式的外观以及为什么file: 后面有三个斜线。
【讨论】: