我尝试使用由.txt文件中特定的、重复出现的文本块组成的数据创建Excel工作表,并忽略文件中的所有其他数据(目录等)。文本块的格式如此处所示,但我在最终Excel工作表的输出中遇到了两个不同的问题。
项目名称
状态:状态项目
类别:类别项目
子类别:子类别项目
日期:年月日
频率:频率项目
语言:语言项目
说明:描述文字
目前,我的代码使用的是一个字典,它是通过搜索一个块模式,将其插入到一个数据框(Pandas)中,然后导出到excel中。然而,我遇到的问题是,它为文本块中的每一行创建一个新行,而不是为每个块创建一个新行。如下所示:
Excel sheet with extra rows
如何使用阻止模式来防止这种情况?
第二个问题是顶层项(“ITEMNAME”)的格式不一样,因为它没有一个“键”可以在字典中使用。我如何将它包含在块模式中,以添加到字典中,并以不同的格式导出?
下面是我的代码。
import pandas as pd
import re
txtFilePath = r'/test.txt'
with open(txtFilePath, 'r') as f:
text = f.read()
# define pattern for block search - first method
block_pattern = re.compile(r"^(?:Status|Event Category|Event Sub-Category|"
r"Added Date|Update Frequency|Language|Description):.+$",
re.MULTILINE)
# find all blocks that match the pattern
blocks = block_pattern.findall(text)
df = pd.DataFrame()
# iterate over blocks and extract patterns
for block in blocks:
# split blocks on individual lines
lines = block.strip().split("\n")
# dict to store items for this block
item_dict = {}
# iterate to find type and values
for line in lines:
item_parts = line.strip().split(":", 1)
item_type = item_parts[0].strip()
item_value = item_parts[1].strip()
# add item to dict
item_dict[item_type] = item_value
df = df.append(item_dict, ignore_index=True)
# print(df)
df.to_excel(r'/text.xlsx')
我已经尝试了两次对append行的更改来修复额外的行。
第一次变更:df.loc[0] = df.append(item_dict, ignore_index=True)
,但它会给出以下错误:
ValueError:无法设置列不匹配的行
第二次变更:df.loc[0] = item_dict
此更改将创建列,但不从字典中导入数据。Excel工作表只包含列。
提前感谢您的帮助。
编辑
示例文本:
机构123
状态:生产
事件类别:新闻资讯
事件子类别:不适用
添加日期:2017年5月10日
更新频率:每周
语言:英语
说明:地方金融机构
Desired Result
1条答案
按热度按时间qcuzuvrc1#
下面是使用
pandas.Series.str.split
和pandas.DataFrame.transpose
的方法。试试这个:
#输出:
最后,要生成Excel电子表格,可以添加
df.to_excel(r"/text.xlsx")
。