在大多数日志处理系统中,日志文件是制表符分隔的文本文件,文件的架构是单独提供的。 例如。
12 tom tom@baidu.com
3 jim jim@baidu.com
架构是
id : uint64
name : string
email : string
为了找到这样的记录 person.name =='tom',代码是
for each_line in sys.stdin:
fields = each_line.strip().split('\t')
if feilds[1] == 'tom': # magic number
print each_line
有很多神奇的数字1 2 3。
是否有一些工具如谷歌协议缓冲区(它是二进制文件),那么我们可以直接从文本构建对象吗?
Message Person {
uint64 id = 1;
string name = 2;
string email = 3;
}
所以我们建立像这样的人:person = lib.BuildFromText(line)
for each_line in sys.stdin:
person = lib.BuildFromText(each_line) # no magic number
if person.name == 'tom':
print each_line
答案 0 :(得分:0)
import csv
Person = {
'id': int,
'name': str,
'email': str
}
persons = []
for row in csv.reader(open('CSV_FILE_NAME', 'r'), delimiter='\t'):
persons.append({item[0]: item[1](row[index]) for index, item in enumerate(Person.items())})
答案 1 :(得分:0)
lib.BuildFromText()函数如何知道如何命名字段?它们只是您传递给它的行中的值,对吗?以下是如何在Python中执行此操作:
import sys
from collections import namedtuple
Person = namedtuple('Person', 'id, name, email')
for each_line in sys.stdin:
person = Person._make(each_line.strip().split('\t'))
if person.name == 'tom':
print each_line