首页 > 解决方案 > 如何将存储在文本文件中的数据转换为 csv

问题描述

我定期以类似于以下结构的文本文件的形式上传数据:

>up
upload 06/14/2021 24:58:09.99 255
————- upload start ————-
2021–06–14 24:58:09.99 upload complete
2021–06–14 24:58:44.05 parameter change: mux sequence '1234'
2021–06–14 24:58:46.88 R 0000_0000000114023569 A1 168
2021–06–14 24:58:49.30 R 0000_0000000114023569 A2 168
————- upload done ————-

在这个例子中,实际数据从第六行开始,如果数据有标题,它看起来像这样:

DetectDate  DetectTime DetectType    ID                 Location     sublocation
2021–06–14 24:58:46.88    R       0000_0000000114023569 A1            168

请注意,数据并不总是从第六行开始。我需要重新组织这些数据并将其存储在带有上述标题的 .csv 中。我还想为 UploadDate 和 UploadTime 添加列,并从文本文件中收集该信息。所以最终的 .csv 将具有以下列:

DetectDate  DetectTime DetectType ID Location  sublocation UploadDate UploadTime

如何在 Python 中做到这一点?

标签: pythoncsvtexttext-files

解决方案


如果您知道数据总是从第六行开始并在最后一行之前停止,您可以使用 Pandas 轻松地做到这一点:

import pandas as pd
from io import StringIO

inputStr = """>up
upload 06/14/2021 24:58:09.99 255
————- upload start ————-
2021–06–14 24:58:09.99 upload complete
2021–06–14 24:58:44.05 parameter change: mux sequence '1234'
2021–06–14 24:58:46.88 R 0000_0000000114023569 A1 168
2021–06–14 24:58:49.30 R 0000_0000000114023569 A2 168
————- upload done ————-"""

filteredInput = '\n'.join(inputStr.splitlines()[5:-1])
coNames = ['DetectDate', 'DetectTime', 'DetectType', 'ID', 'Location', 'sublocation']
df = pd.read_table(StringIO(filteredInput), delimiter=r'\s+', header=None, names=coNames)
print(f)

这使:

   DetectDate   DetectTime DetectType                     ID Location  sublocation
0  2021–06–14  24:58:46.88          R  0000_0000000114023569       A1          168
1  2021–06–14  24:58:49.30          R  0000_0000000114023569       A2          168

要存储df在文件中,您可以使用df.to_csv(filePath).

如果您需要更高级的解析,可以使用正则表达式(使用rePython 模块)。


推荐阅读