微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何简单的处理复杂的文件名,将两条文件名规则写入代码?

如何解决如何简单的处理复杂的文件名,将两条文件名规则写入代码?

我在 Python 图像抓取工具中制定文件名规则时遇到问题。 一个网站的图片网址大致有两种类型。

首先,src="https://cdn2.ettoday.net/images/5694/5694939.jpg"

这个我可以这样拆分:

file_name = image_url.split('/')[-1]

然后,我可以根据需要获取文件名。

5694939.jpg


其次,这个看起来很复杂。

src="https://scontent-tpe1-1.xx.fbcdn.net/v/t1.6435-9/160617071_1533135443546936_5774762828455542817_n.jpg?_nc_cat=19sid&8_nc_cat=19_sid&8_nc_cat=19_sid&8_nc_cat=19_sid&888888888888.com 1.xx&oh=1a66da48cab3dfefa7847d14a88e1099&oe=60F0936C"

假设我只想要其中的一部分,理想的结果是这样的

5774762828455542817_n.jpg

如何拆分这个复杂的网址,如何为不同的图片网址制定两个或多个规则?

解决方法

尝试先在“/”上拆分,然后在“?”上拆分然后在“_”

>>> url = 'https://scontent-tpe1-1.xx.fbcdn.net/v/t1.6435-9/160617071_1533135443546936_5774762828455542817_n.jpg?_nc_cat=107&ccb=1-3&_nc_sid=8bfeb9&_nc_ohc=_qmfrLffEHEAX9MION0&_nc_ht=scontent-tpe1-1.xx&oh=1a66da48cab3dfefa7847d14a88e1099&oe=60F0936C'
>>> filename = url.split("/")[-1]
>>> filename
'160617071_1533135443546936_5774762828455542817_n.jpg?_nc_cat=107&ccb=1-3&_nc_sid=8bfeb9&_nc_ohc=_qmfrLffEHEAX9MION0&_nc_ht=scontent-tpe1-1.xx&oh=1a66da48cab3dfefa7847d14a88e1099&oe=60F0936C'
>>> filename = filename.split("?")[0]
>>> filename
'160617071_1533135443546936_5774762828455542817_n.jpg'
>>> filename = filename.split("_")
>>> filename = filename[0] if len(filename)==1 else "_".join(filename[-2:])
>>> filename
'5774762828455542817_n.jpg'

或两个班轮将是:

filename = url.split("/")[-1].split("?")[0].split("_")
filename = filename[0] if len(filename)==1 else "_".join(filename[-2:])
    

这将给出 '5774762828455542817_n.jpg' 作为输出

,

您可以使用标准库 urllib 来完成此任务。该库提供了函数 urlparse 来解析 URL。但是您仍然需要拆分路径才能仅获取文件名。

import urllib

path = urllib.parse.urlparse(url).path
file_name = path.split('/')[-1]

您还可以使用外部库 yarl,它提供了一个广泛的 URL 类,该类具有 name 属性,您可以使用该属性直接超​​出文件名。 >

import yarl

file_name = yarl.URL(url).name

要仅获取此特定 URL5774762828455542817_n.jpg,您可以拆分它并再次连接最后两个项目。

>>> '_'.join(file_name.split('_')[-2:])
'5774762828455542817_n.jpg'
,

您可以使用 urllib,这将达到您的目的。

import os
from urllib.parse import urlparse

image_url = "https://scontent-tpe1-1.xx.fbcdn.net/v/t1.6435-9/160617071_1533135443546936_5774762828455542817_n.jpg?_nc_cat=107&ccb=1-3&_nc_sid=8bfeb9&_nc_ohc=_qmfrLffEHEAX9MION0&_nc_ht=scontent-tpe1-1.xx&oh=1a66da48cab3dfefa7847d14a88e1099&oe=60F0936C"
data = urlparse(image_url)               
print(os.path.basename(data.path)) # Output: 160617071_1533135443546936_5774762828455542817_n.jpg

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?