python - 如何将存储在文本文件中的数据转换为 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 中做到这一点?
解决方案
如果您知道数据总是从第六行开始并在最后一行之前停止,您可以使用 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)
.
如果您需要更高级的解析,可以使用正则表达式(使用re
Python 模块)。
推荐阅读
- c++ - range::lower_bound 对比较的要求是否与 std::lower_bound 不同?
- java - 如何为可以是字符串或自定义类型的元素列表创建 JAXB 元素
- python - 请如何缩短我的硒 python 代码
- scala - 使用数值时的类型转换
- android - Kotlin 1.5.20 构建问题
- python - 在间隔很小并一次请求大量数据的情况下提高循环的速度
- mysql - ORDER BY FIELD 并结合 2 个值
- jsp - JSP:如何在输入标记中格式化 XMLGregorianCalendar
- python - 将代码的输出附加到它来自 python 数据框中的行
- flutter - 调整具有 iframe 的窗口大小时,Flutter UI 变得不稳定 - Flutter 最新版本:Flutter 2.3.0-24.1.pre