栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

解析文本文件中的数据

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解析文本文件中的数据

实际上,它与CSV相距甚远。

您可以将文件用作迭代器;以下生成器函数产生完整的部分:

def load_sections(filename):    with open(filename, 'r') as infile:        line = ''        while True: while not line.startswith('****'):      line = next(infile)  # raises StopIteration, ending the generator     continue  # find next entry entry = {} for line in infile:     line = line.strip()     if not line: break     key, value = map(str.strip, line.split(':', 1))     entry[key] = value yield entry

这会将文件视为迭代器,这意味着任何循环都将文件推进到下一行。外循环仅用于从一个部分移动到另一个部分。内部

while
for
循环完成所有实际工作;首先跳过行,直到
****
找到标题部分(否则将其丢弃),然后在所有非空行上循环以创建一个部分。

循环使用该函数:

for section in load_sections(filename):    print section

在文本文件中重复样本数据将导致:

>>> for section in load_sections('/tmp/test.txt'):...     print section... {'Data4': '715', 'Data1': '0.1834869385E-002', 'ID': '01', 'Data3': '-0.1091356549E+001', 'Data2': '10.9598489301'}{'Data4': '715', 'Data1': '0.1834869385E-002', 'ID': '01', 'Data3': '-0.1091356549E+001', 'Data2': '10.9598489301'}{'Data4': '715', 'Data1': '0.1834869385E-002', 'ID': '01', 'Data3': '-0.1091356549E+001', 'Data2': '10.9598489301'}

您可以根据需要添加一些数据转换器。键到callable的映射将执行以下操作:

converters = {'ID': int, 'Data1': float, 'Data2': float, 'Data3': float, 'Data4': int}

然后在生成器函数中,而不是

entry[key] = value
do
entry[key] = converters.get(key, lambdav: v)(value)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625998.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号