2017-02-15 30 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值进行过滤。