Python从路径|URL中获取文件名、文件后缀的方法分享:
我们可以通过urlparse模块中的urllib.parse方法、os.path模块或者是字符串split、rfind等方法去实现,非常简单。这样就不用去写正则了哈哈哈。
一般情况下urlparse更合适解析URL(URL中有参数的时候,不需要做其他处理),os.path模块则更合适处理本地路径,所以大部分时候个人建议选择这两种方式也就可以了,当然你也可以选择字符串split、rfind等方法…
下面分享下示例代码:
os.path模块
import os
os.path.basename()
file_path = r"C:\Users\Desktop\hellopython.py"
# os.path.dirname() 从指定路径获取目录名称
os.path.dirname(file_path) # C:\Users\Desktop
# os.path.basename() 返回path最后的文件名
os.path.basename(file_path) # hellopython.py
urllib.parse模块
urllib.parse是一个用于解析URL的模块。官方文档链接:urllib.parse 用于解析 URL
urllib.parse.urlparse会将一个 URL 解析为六个部分,返回一个包含 6 项的 named tuple(所以我们可以通过索引或作为命名属性访问)。 这对应于 URL 的主要结构: scheme://netloc/path;parameters?query#fragment。 每个元组项均为字符串,可能为空字符串。 这些部分不会再被拆分为更小的部分(例如,netloc 将为单个字符串),并且 % 转义不会被扩展。 上面显示的分隔符不会出现在结果中,只有 path 部分的开头斜杠例外,它如果存在则会被保留。
完整内容如下:
属性 | 索引 | 值 | 值(如果不存在) |
---|---|---|---|
scheme | 0 | URL协议 | scheme 参数 |
netloc | 1 | 网络位置部分 | 空字符串 |
path | 2 | 分层路径 | 空字符串 |
params | 3 | 最后路径元素的参数 | 空字符串 |
query | 4 | 查询组件 | 空字符串 |
fragment | 5 | 片段识别 | 空字符串 |
username | 用户名 | None | |
password | 密码 | None | |
hostname | 主机名(小写) | None | |
port | 端口号为整数(如果存在) | None |
示例代码:
from urllib.parse import urlparse
urlparse("scheme://netloc/path;parameters?query#fragment")
ParseResult(scheme='scheme', netloc='netloc', path='/path;parameters', params='',
query='query', fragment='fragment')
o = urlparse("http://docs.python.org:80/3/library/urllib.parse.html?"
"highlight=params#url-parsing")
o
ParseResult(scheme='http', netloc='docs.python.org:80',
path='/3/library/urllib.parse.html', params='',
query='highlight=params', fragment='url-parsing')
o.scheme
'http'
o.netloc
'docs.python.org:80'
o.hostname
'docs.python.org'
o.port
80
o._replace(fragment="").geturl()
'http://docs.python.org:80/3/library/urllib.parse.html?highlight=params'
urllib.parse.urlparse解析URL获取文件名实例代码
urllib.parse.urlparse中直接获取path,有参数也可以不用做其他处理,直接提取我们要的文件名或者是文件后缀即可。
import os
from urllib.parse import urlparse
test_url = "http://domain.com/path/img_name.jpg?xxxxxz"
parse_url = urlparse(test_url)
file_path = parse_url.path # 获取路径
print(file_path) # /path/img_name.jpg
# 配合os.path模块获取
file_name = os.path.basename(parse_url.path)
print(file_name) # img_name.jpg
# os.path.splitext(path) 分割路径,返回路径名和文件扩展名的元组
file_name, file_suffix = os.path.splitext(file_name)
print(file_name) # img_name
print(file_suffix) # .jpg
字符串 split方法
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串,返回值是一个列表,我们通过对路径中的\进行切片,然后使用[-1]拿到最后一个值,就是文件名了。
split方法详情:Python split()方法 | 菜鸟教程
示例代码
file_path = r"C:\Users\Desktop\hellopython.py"
print(file_path.split("\\")[-1]) # hellopython.py
字符串 rfind方法
Python rfind() 返回字符串最后一次出现的位置,如果没有匹配项则返回 -1。
我们使用它找到\最后一次出现的位置,然后通过对字符串使用索引去获取文件名。
rfind方法详情:Python rfind()方法 | 菜鸟教程
file_path = r"C:\Users\Desktop\hellopython.py"
a_index = file_path.rfind("\\") # 找到"\"出现的位置
print(file_path[a_index + 1:]) # hellopython.py
print(file_path[:a_index]) # C:\Users\Desktop