python - 将文本文件拆分为多个文件并上传到数据框 pandas
问题描述
我有非常丑陋的格式的数据:
Table 501
----------------------------------------------------------------
|Sale|Di|Dv|Cus |Mat |Valid From|Valid to |
----------------------------------------------------------------
|88|01|02|dd|20300 |24.05.2012|31.12.9999|
|889|01|02|dd|20300 |24.05.2012|31.12.9999|
|890|01|02|dd|20300 |24.05.2012|31.12.9999|
----------------------------------------------------------------
Table 55
---------------------------------------------------------
|Sale|Di|Dv|Cus |Grou|S|Valid From|Valid to |
---------------------------------------------------------
|4500|44|55|A|01560 | |11.02.2019|31.12.9999|
|4500|44|55|BBB|55070 | |30.04.2018|31.12.9999|
|4500|44|55|D|55080 | |30.04.2018|31.12.9999|
|4500|44|55|D|55420 | |30.04.2018|31.12.9999|
|4500|44|55|8834496 |55450 | |30.04.2018|31.12.9999|
---------------------------------------------------------
Table 065
----------------------------------------------------------------
|Sale|Di|Dv|Cus |Mat |Valid From|Valid to |
----------------------------------------------------------------
|4500|44|55|bbbb |01000 |29.05.2013|31.12.9999|
----------------------------------------------------------------
我想使用 python 从这个 txt 中提取数据到 pandas 数据框 = 表的名称列在后面,如 Table_065 。
我想我会阅读整个 txt 并将其拆分为多个 txt,替换以 '-%' 和 '%' 开头的行,然后将其作为单个表格上传。
但我很快就被卡住了:
file = open('0400.txt', 'r')
a = [n for n in file.readlines() if not n.startswith(' -') ]
#a = str(a)
#b = [n for n in a.readlines() if not n.startswith(' ') ]
似乎在使用 a 变量后,它不再是字符串而是列表等。我需要帮助。请问,这里有人可以帮助我吗?谢谢!
解决方案
9999
在将年份转换为datetime
对象时尝试一些操作和 pandas 错误处理
import pandas as pd
with open("0400.txt", "r") as f:
lines = [
[y.strip() for y in x.split("|")]
for x in f.readlines() if not x.startswith(" -")]
df = pd.DataFrame(lines[1:], columns=lines[0])
df["Valid to"] = pd.to_datetime(df["Valid to"], errors="coerce").fillna(pd.Timestamp.max.date())
df["Valid From"] = pd.to_datetime(df["Valid From"], errors="coerce")
print(df)
Sale Di Dv Cus Mat Valid From Valid to
0 0400 01 02 1327260 20300 2012-05-24 2262-04-11
1 0400 01 02 1327260 20300 2012-05-24 2262-04-11
2 0400 01 02 1327260 20300 2012-05-24 2262-04-11
推荐阅读
- apache-spark - 如何使用 python (PySpark) 转置 spark DF?
- node.js - 移动键盘打开时反应隐藏组件
- azure-data-factory - ADF: Dynamic Content in parameters
- java - Recyclerview 适配器 onCreateViewHolder 方法 LinearLayout 无法强制转换为 TextView
- excel - 合并来自多个 Application.GetOpenFilename 语句的结果
- timer - STM32最大接口时钟和最大定时器时钟的区别
- azure - 使用 Azure App Service 部署 docker 应用程序而不是 Azure Container Instance 有哪些优势?
- javascript - GET http://localhost:8563/socket.io/?EIO=3&transport=polling&t=NEsUPis 404(未找到)
- r - 如何让 R 充分利用双 GPU?
- javascript - 猫鼬在 ref 字段中添加更多键:值