从 key/counters 文本文件创建 python table
Creating a python table from key/counters text file
文本文件示例
<counter name="abcb">70324360</counter>
<counter name="efghij">1094</counter>
<counter name="klm">0</counter>
我想创建一个函数,当我调用计数器名称 (efghij) 时,它将 return 计数器编号 (1094)。我实际上不知道从哪里开始使用该文本文件。
您可以使用 xml 模块,它与您的文件结构非常接近:
s = '''
<counter name="abcb">70324360</counter>
<counter name="efghij">1094</counter>
<counter name="klm">0</counter>'''
import xml.etree.ElementTree as ET
tree = ET.fromstring('<root>' + s + '</root>')
def get_counter(name):
for node in tree.iter('counter'):
if node.attrib.get('name') == name:
return node.text
用法:
get_counter('klm')
'0'
如果您正在从文件中读取源代码,只需更改为这个并用 <root>
节点包裹:
with open('your_file.txt', 'r') as f:
s = f.read()
tree = ET.fromstring('<root>' + s + '</root>')
...
旁注:fromstring() 如果没有 root 节点,你可以在解析之前简单地包装它。
您可以创建一个 dict
来保存计数器,而不是函数。读取文本文件(在本例中为 'file.txt')并使用 re
从每一行中提取数据。
import re
counter = {}
re_counter = re.compile(r'name="(\w+)">(\d+)')
for line in open('file.txt'):
match = re_counter.search(line)
if match:
counter[match.group(1)] = match.group(2)
print counter["efghij"]
文本文件示例
<counter name="abcb">70324360</counter>
<counter name="efghij">1094</counter>
<counter name="klm">0</counter>
我想创建一个函数,当我调用计数器名称 (efghij) 时,它将 return 计数器编号 (1094)。我实际上不知道从哪里开始使用该文本文件。
您可以使用 xml 模块,它与您的文件结构非常接近:
s = '''
<counter name="abcb">70324360</counter>
<counter name="efghij">1094</counter>
<counter name="klm">0</counter>'''
import xml.etree.ElementTree as ET
tree = ET.fromstring('<root>' + s + '</root>')
def get_counter(name):
for node in tree.iter('counter'):
if node.attrib.get('name') == name:
return node.text
用法:
get_counter('klm')
'0'
如果您正在从文件中读取源代码,只需更改为这个并用 <root>
节点包裹:
with open('your_file.txt', 'r') as f:
s = f.read()
tree = ET.fromstring('<root>' + s + '</root>')
...
旁注:fromstring() 如果没有 root 节点,你可以在解析之前简单地包装它。
您可以创建一个 dict
来保存计数器,而不是函数。读取文本文件(在本例中为 'file.txt')并使用 re
从每一行中提取数据。
import re
counter = {}
re_counter = re.compile(r'name="(\w+)">(\d+)')
for line in open('file.txt'):
match = re_counter.search(line)
if match:
counter[match.group(1)] = match.group(2)
print counter["efghij"]