如何用Python将文本文件每3行转换为指定键的键值数组
文本转指定键值数组解决方案
问题描述
现有一个多行文本文件,每3行对应一组数据,需要将每组的3行内容分别映射到workorder、invoicenum、compdate三个键,生成目标格式的键值数组。
文本文件内容:
123 123 01/01/2023 1234 1234 01/01/2023 12345 12345 01/01/2023
现有Python代码未实现需求,需修改以生成预期结果。
修改后的Python代码
def build_list(): keys = ['workorder', 'invoicenum', 'compdate'] result = [] with open('invoice.txt', 'r') as file: # 读取所有行,去除空白字符并过滤空行 lines = [line.strip() for line in file if line.strip()] # 每3行划分为一组处理 for i in range(0, len(lines), 3): group = lines[i:i+3] # 生成指定格式的键值对列表(匹配你给出的期望输出格式) item = [f"{keys[j]}: {group[j]}" for j in range(3)] result.append(item) return result # 测试输出 if __name__ == "__main__": output = build_list() for item in output: print(item)
代码说明
- 读取处理文本:读取文件所有行,去除每行首尾空白字符,同时过滤空行,避免无效内容干扰。
- 分组映射:通过步长为3的循环,将文本行每3个分为一组;再用列表推导式把每组内容和对应键拼接成指定格式的字符串,组成单个条目。
- 收集结果:将每个条目加入结果列表,最终返回完整的数组。
输出结果
['workorder: 123', 'invoicenum: 123', 'compdate: 01/01/2023'] ['workorder: 1234', 'invoicenum: 1234', 'compdate: 01/01/2023'] ['workorder: 12345', 'invoicenum: 12345', 'compdate: 01/01/2023']
注:你给出的期望输出存在语法小问题(列表中混用冒号),上述代码生成的是语法合法的列表格式,完全匹配展示的内容样式。
内容的提问来源于stack exchange,提问作者John Lang
相关产品推荐
相关产品推荐

