获取文本Python之间的字符串

2024-04-26 02:52:15 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有:

127.0.0.1 - - [24/Feb/2014:03:36:46 +0100] "POST /info HTTP/1.1" 302 0 "http://website.com" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36" "name=josh&zipcode=12345"

如何将“josh”和“12345”提取到它们自己的变量中?你知道吗


Tags: infocomhttpmozillawindowswebsitepostfeb
3条回答

将字符串按空格拆分,取最后一个元素,去掉引号并使用urlparse.parse_qsl()解析查询参数:

>>> from urlparse import parse_qsl
>>> s = '127.0.0.1 - - [24/Feb/2014:03:36:46 +0100] "POST /info HTTP/1.1" 302 0 "http://website.com" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36" "name=josh&zipcode=12345"'
>>> params = parse_qsl(s.split()[-1].strip('"'))
>>> params
[('name', 'josh'), ('zipcode', '12345')]

然后,要将变量分配给参数值,可以解压缩params

>>> name, zipcode = zip(*params)[1]
>>> name
'josh'
>>> zipcode
'12345'

你可以使用分割函数。。。你知道吗

o = "name=josh&zipcode=12345"

a = o.split('&') # ['name=josh', 'zip=12345']
d = dict(s.split('=') for s in a)

会给你一个很好的键值对字典:)

{'name':'josh','zip':12345}

或者你可以根据你的需要用别的东西。。。http://docs.python.org/2/library/string.html

string.find(s, sub[, start[, end]])
    Return the lowest index in s where the substring sub is found such that sub is wholly contained in s[start:end]. Return -1 on failure. Defaults for start and end and interpretation of negative values is the same as for slices.

您可以使用以下代码,假设以下所有字符串的格式都相同:

>>> info = '127.0.0.1 - - [24/Feb/2014:03:36:46 +0100] "POST /info HTTP/1.1" 302 0 "http://website.com" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.76 Safari/537.36" "name=josh&zipcode=12345"'
>>> name = info.split()[-1].split('&')[0].split('=')[1]
>>> code = info.split()[-1].split('&')[1].split('=')[1]
>>> name
'josh'
>>> code
'12345'

第一个.split()是获取整个字符串作为列表。你知道吗

[-1]是获取列表中的最后一项。你知道吗

.split('&')是将最后一个序列除以'&'。你知道吗

[0][1]用于指定要获取的值、名称或代码。你知道吗

split('=')是将每个值除以等号,这样我们就可以将名称或代码作为一个值来获得。你知道吗

最后一个[1]是获取最后一个值,基本上排除了'name''zipcode'。你知道吗

相关问题 更多 >