gpt4 book ai didi

python - 在 python 中解析以分号分隔的文件以创建 CSV

转载 作者:行者123 更新时间:2023-11-28 21:25:28 26 4
gpt4 key购买 nike

我有一个以下格式的大文本文件,我想将其转换为 CSV 文件。 CSV 文件中的列名应对应于下面显示的元组的第一部分。可以安全地假设该行中的第一项(不是元组)将始终采用以下格式。

其他问题包括每行可能不具有相同的字段 - 例如,有些有状态,有些则没有。有些具有同一字段的多个实例,在这种情况下,我需要将元组的第二部分连接起来(例如致史密斯先生;格林夫人),但这些问题目前还比较遥远。

[' Message  1 '];['Status', 'Read'];['Message ID', '012434'];['Message Truncation', 'OK'];['Priority', 'Low'];['Sent Time', '15/12/2010 05:56:36']
[' Message 2 '];['ColumnName', 'Read'];['ColumnName2', '012434'];['Message Truncation', 'OK'];['Priority', 'Low'];['Sent Time', '15/12/2010 05:56:36']
[' Message 3 '];['To', 'Mr Smith'];['To', 'Mrs green'];['Message Truncation', 'OK'];['Priority', 'Low'];['Sent Time', '15/12/2013 05:56:36']

...

我的计划是遍历文件中的每个 block 以建立列名,然后开始向这些列名添加数据,并在适当的时候留空。我只是想知道如何以 pythonic 的方式解决这个问题,因为我一直在玩字典列表并被卡住了。

我想我需要拆分行,然后将每个元组添加到字典中。有什么帮助吗?谢谢!

for line in file:
line_split = line.split(';')

最佳答案

你可以使用 ast.literal_eval将每个 ['something', 'something_else'] block 变成一个 python 列表:

import ast

column_ids = set()

for line in file:
columns = [tuple(ast.literal_eval(c)) for c in line.split(';')]
columns[0] = ('id', columns[0][0]) # Give the first column a 'Id' key
columns = dict(columns) # turn the row into a dict
column_ids.update(columns)

添加打印语句并使用您的示例输入,结果是:

{'Status': 'Read', 'Sent Time': '15/12/2010 05:56:36', 'Message Truncation': 'OK', 'Message ID': '012434', 'Priority': 'Low', 'id': ' Message  1 '}
{'Sent Time': '15/12/2010 05:56:36', 'ColumnName2': '012434', 'Message Truncation': 'OK', 'Priority': 'Low', 'ColumnName': 'Read', 'id': ' Message 2 '}
{'Message Truncation': 'OK', 'To': 'Mrs green', 'Priority': 'Low', 'id': ' Message 3 ', 'Sent Time': '15/12/2013 05:56:36'}

column_ids 是:

set(['Status', 'Priority', 'ColumnName', 'Message Truncation', 'Message ID', 'To', 'Sent Time', 'ColumnName2', 'id'])

关于python - 在 python 中解析以分号分隔的文件以创建 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14214464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com