2011-04-18 94 views
1

我是python的新手,学习基础知识。用于URL拆分的Python脚本

我的查询: 我有多个页面从像下面的一个日志文件的请求访问,

"GET /img/home/search-user-ico.jpg HTTP/1.1" 
"GET /SpellCheck/am.tlx HTTP/1.1" 
"GET /img/plan-comp-nav.jpg HTTP/1.1" 
"GET /ie6.css HTTP/1.1" 
"GET /img/portlet/portlet-content-bg.jpg HTTP/1.1" 
"GET /SpellCheck/am100k2.clx HTTP/1.1" 
"GET /SpellCheck/am.tlx HTTP/1.1" 

我的问题是我想从页面只有文件的一部分, 例如, 让我们考虑"GET /img/home/search-user-ico.jpg HTTP/1.1" ,"GET /ie6.css HTTP/1.1"为一页,然后从上面我想拆分search-user-ico.jpg HTTP,ie6.css HTTP

所以请高手帮我写上面的python脚本来分割。

+0

下面两个文件名称是不实际的文件名,你确定你想匹配的一部分,HTTP的一部分? – 2011-04-18 08:59:00

+0

所以你想要输出字符串中的“HTTP”而不是HTTP版本? – 2011-04-18 08:59:10

回答

2

假设文件名中没有空格,并且最后不需要“HTTP”。

您可以按空格拆分该行。

parts = line.split(" ") 

然后使用os模块从路径中获取文件名。

filename = os.path.basename(parts[1]) 

例如,

>>> line = "GET /img/home/search-user-ico.jpg HTTP/1.1" 
>>> parts = line.split(" ") 
>>> parts[1] 
'/img/home/search-user-ico.jpg' 
>>> os.path.basename(parts[1]) 
'search-user-ico.jpg' 
+1

作为一个单行,假设“entries”是条目的列表/元组:''filenames = [os.path.basename(entry.split()[1])用于在条目中输入]'' – Blair 2011-04-18 09:10:14

+0

+1。 @Jothi @Blair将我的代码修改为“List Comprehension”是Python的一个非常好用的功能。 – 2011-04-18 10:55:13

0
data = [ 
"GET /img/home/search-user-ico.jpg HTTP/1.1", 
"GET /SpellCheck/am.tlx HTTP/1.1", 
"GET /img/plan-comp-nav.jpg HTTP/1.1" , 
"GET /ie6.css HTTP/1.1", 
"GET /img/portlet/portlet-content-bg.jpg HTTP/1.1", 
"GET /SpellCheck/am100k2.clx HTTP/1.1" , 
"GET /SpellCheck/am.tlx HTTP/1.1" 
] 

for url in data: 
    print url.split(' ')[1].split('/')[-1] 
0

如果您链接的格式是类似的。另一个解决方案是:

request = "GET /img/home/search-user-ico.jpg HTTP/1.1" 
parts = request.split("/") 
parts[-2] //returns search-user-ico.jpg HTTP 
1
data = [ 
"GET /img/home/search-user-ico.jpg HTTP/1.1", 
"GET /SpellCheck/am.tlx HTTP/1.1", 
"GET /img/plan-comp-nav.jpg HTTP/1.1" , 
"GET /ie6.css HTTP/1.1", 
"GET /img/portlet/portlet-content-bg.jpg HTTP/1.1", 
"GET /SpellCheck/am100k2.clx HTTP/1.1" , 
"GET /SpellCheck/am.tlx HTTP/1.1" 
] 

for url in data: 
    print url.split(' ')[1].split('/')[-2] 
+0

这将打破各种边缘情况。此外,它匹配中间字符串的倒数第二部分,而不是最后一部分。 – 2011-04-18 11:47:08