2017-02-15 37 views
0

我從網站 https://en90.tribalwars.net/map/village.txtPython從一個txt網頁

這是第幾行有一個大的txt文件刮:

1,Barbarian+village,508,538,10342642,4208,0

2,ckouta+village,507,542,11001011,9761,0

3,Bonus+village,464,449,0,1513,1

4,Revenge+Will+Be+Sweet,501,532,9202536,9835,0

5,OFF,515,501,11158923,5644,0

我現在想提取具有給定第三和第四列匹配線上的第一個圖。例如:假設我在尋找X = 464和Y = 449我希望我的腳本返回3

我試圖解析與beautifulsoup HTML頁面,然後使用正則表達式匹配正確的路線,但我不能讓這個工作。

+0

你不需要'BeautifulSoup' – Arman

+1

我建議將頁面中的值轉換爲'csv'文件格式(逗號分隔值),它看起來像btw,然後用csv編輯器或python包匹配列式,不需要美麗的襪子 – Bijoy

回答

1

您可以使用括號和re模塊groups()

下面的代碼將使您能夠訪問到第1,第3和第4號。

import re 
pattern = r'(.+),.+,(.+),(.+),.+,.+,.+' 
string = '3,Bonus+village,464,449,0,1513,1' 
foo = re.match(pattern, string).groups() 
print(foo) 

留下你只要比較富to'464' ,富的第三次爲‘449’的第2位。


我看到使用CSV推薦一個評論,我相信這是一個非常合理的想法。相當於使用CSV可以通過使用string.split(',')

+0

謝謝!與圖案您提供一些小的調整我有它的工作現在:) – Lander

+0

存在丟失字符的代碼段(第3行收盤報價)。我無法編輯,因爲編輯至少需要6個字符的更改,而這只是一個。 –

+0

謝謝你告訴我。 我誰料第3行缺少的結束引號。 – Allosteric

0

在特定的情況下,我不會用正則表達式來完成。這些數據看起來像CSV數據(逗號分隔值),並且非常一致。

我的建議:

from urllib import urlopen 
from collections import namedtuple 

text = 'https://en90.tribalwars.net/map/village.txt' 
content = urlopen(text).read() 
lines = content.split('\n')[0:-1] # last character is an empty string 

village = namedtuple('village', ['id', 'name', 'x', 'y', 'z', 'whatever']) 

def create_item(line): 
    item = village(
     id=line.split(',')[0], 
     name=line.split(',')[1], 
     x=line.split(',')[2], 
     y=line.split(',')[3], 
     z=line.split(',')[4], 
     whatever=line.split(',')[5] 
    ) 
    return item 

lines = [create_item(line) for line in lines] 

sample = lines[0] 
print sample.id 
print sample.name 
print sample.x  # 512 
print sample.y  # 529 

我添加了一個namedtuple也讓它更酷。這些行包含所有數據,並且您應該能夠編寫一個函數以基於x和y值進行過濾。