在Python中动态构造URL

时间:2018-02-06 18:41:58

标签: python url flickr

我有一个

形式的网址模板
https://farm{farm-id}.staticflickr.com/{server-id}/{photo-id}_{secret}.jpg

我检索了以下字段,这些记录大约有1000000个。检索下面的记录后

farm-id: 1
server-id: 2
photo-id: 1418878
secret: 1e92283336
size: m

我需要构建此网址

https://farm1.staticflickr.com/2/1418878_1e92283336_m.jpg

我正在考虑一些方法,我应该为这个构建字典吗?

4 个答案:

答案 0 :(得分:1)

您可以尝试使用 CASE WHEN ( date_column !=' ' AND ( ISDATE(date_column )=0 OR ( ISDATE(date_column )=1 AND ( CHARINDEX(' ',date_column ,0) <>3 OR ( CHARINDEX(' ',date_column ,4) <>7 OR (LEN(date_column) <>11 ) ) ) THEN 1 ELSE 0 END)

str.format(*args, **kwargs)

格式字符串中包含fmt = 'https://farm{farm-id}.staticflickr.com/{server-id}/{photo-id}_{secret}.jpg' values = { 'farm-id': '1', 'server-id': 2, 'photo-id': '1418878', 'secret': '1e92283336', 'size': 'm' } fmt.format(**values) {的所有内容都称为“替换字段”。它可以与}一起用于此类格式化。更多信息here

答案 1 :(得分:0)

字典可能是你最好的选择。作为替代方案,请查看named tuples

Data = namedtuple('farm-id', 'server-id', 'photo-id', 'secret', 'size')
d = Data(1 ,2 ,1418878, 1e92283336, m)

答案 2 :(得分:0)

我设法从文件中提取数据,现在我有两件事,一组固定的键和一组不同的值。

['farm-id','server-id','photo-id','secret','originalformat','originalsecret']

['3','2287','2109698205','20fbbcc947','jpg','7a57411545']

['3','2063','2172469872','8ddb85aedd','jpg','e12b952909']

['2','1079','830593398','9ddca27ab0','jpg','bb91586e56']

['3','2371','2226919732','248f23c5ff','jpg','29f35fb0ca']

['2','1014','798067744','4f043d2ea6','jpg','d739cc870b']

是否有更智能的方法将这两个列表合并到字典中,之后我可以使用创建URL所需的格式

答案 3 :(得分:0)

首先,如果您的数据采用您指定的格式,则应确保可以解释1e92283336等数字的解释方式与您的预期不同。例如json

>>> json.loads('{"secret" : 1e92283336, "server_id" : 2, "farm_id": 1, "size" : "m"}')
{u'secret': inf, u'farm_id': 1, u'server_id': 2, u'size': u'm'}

将字段成功导入字典后,有多种方法可以使用字符串插值和格式化。除了上一个答案中提到的str.format说明符之外,您可以使用下面的传统%样式格式(请注意右括号后的格式说明符s

>>> url = "https://farm%(farm-id)s.staticflickr.com/%(server-id)s/%(photo-id)s_%(secret)s.jpg"
>>> print url % {'secret': '1e92283336', 'server-id': '2', 'farm-id': '1', 'size': 'm', 'photo-id' : '1418878'}
https://farm1.staticflickr.com/2/1418878_1e92283336.jpg

您还可以使用Template Strings使用Template模块中的string类。这对bash / perl程序员来说更为熟悉。模板字符串的形式如下。占位符(在可选大括号内)必须是有效的python identifiers,因此它不能包含-等字符。第一个非标识符字符终止占位符。使用safe_substitute方法,如果缺少任何占位符值,它将放置原始占位符,而不是引发键错误。

>>> from string import Template
>>> s = Template("https://farm${farm_id}.staticflickr.com/${server_id}/${photo_id}_${secret}.jpg")
>>> s.substitute({'secret': '1e92283336', 'server_id': '2', 'farm_id': '1', 'size': 'm', 'photo_id' : '1418878'})
'https://farm1.staticflickr.com/2/1418878_1e92283336.jpg'
>>> s.safe_substitute({'server_id': '2', 'farm_id': '1', 'size': 'm', 'photo_id' : '1418878'})
'https://farm1.staticflickr.com/2/1418878_${secret}.jpg'