2011-04-18 69 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