Python 将文本文件转换为带有列的csv
我想将文本文件转换为csv文件,其中包含名称、日期、描述等列 我是python新手,所以没有一个合适的方法来做这件事,有人可以指导我。 下面是示例文本文件Python 将文本文件转换为带有列的csv,python,python-3.x,pandas,Python,Python 3.x,Pandas,我想将文本文件转换为csv文件,其中包含名称、日期、描述等列 我是python新手,所以没有一个合适的方法来做这件事,有人可以指导我。 下面是示例文本文件 ================================================== ==== Title: Whole case Location: oyuri From: Aki Date: 2018/11/30 (Friday) 11:55:29 ====================================
================================================== ====
Title: Whole case
Location: oyuri
From: Aki
Date: 2018/11/30 (Friday) 11:55:29
================================================== =====
1: Aki
2018/12/05 (Wed) 17:33:17
An approval notice has been sent.
-------------------------------------------------- ------------------
2: Aki
2018/12/06 (Thursday) 17:14:30
I was notified by Mr. Id, the agent of the other party.
-------------------------------------------------- ------------------
3: kano, etc.
2018/12/07 (Friday) 11:44:45
Please call rito.
-------------------------------------------------- ------------------
我在下面概述了一种实现任务的非常简单的方法。总的想法是:
open()
列表
列表中每个元素中的信息
pandas
将熊猫作为pd导入
#打开文件并提取文本
text_path='text.txt'
打开(文本路径)作为f:
text=f.read()
#将文本拆分为列表
行=文本。拆分('\n')
#删除标题
len_航向=6
行=行[6:]
#使用分隔符分离信息
除法器='-'
数据=[]
开始=0
对于i,枚举中的行(行):
#如果发现分隔符,则向数据添加元素
如果行开始使用(分隔符):
data.append(行[start:i])
开始=i+1
#从数据中提取名称、日期和描述
名称、日期、说明=[]、[]、[]
有关数据中的信息:
#这是一个非常简单的方法,请添加检查
#以确保获得正确的数据
名称=信息[0][2:]
日期=信息[1][:11]
desc=信息[2]
name.append(name)
日期。附加(日期)
description.append(desc)
#创建数据帧
df=pd.DataFrame({'name':名称,'date':日期,'description':description})
#将数据帧导出到csv
df.to_csv('converted_text.csv',index=False)
你应该得到一个CSV文件,看起来像这样
np.where(cond,1,0).cumsum()
标记每个单独的消息输出:
name date \
tag
2.0 1: Aki 2018/12/05 (Wed) 17:33:17
3.0 2: Aki 2018/12/06 (Thursday) 17:14:30
4.0 3: kano, etc. 2018/12/07 (Friday) 11:44:45
Description
tag
2.0 An approval notice has been sent.
3.0 I was notified by Mr. Id, the agent of the oth...
4.0 Please call rito.
df:
您可以继续处理该名称:
obj = df_output['name'].str.strip().str.split(':\s*')
df_output['name'] = obj.str[-1]
df_output['idx'] = obj.str[0]
df_output = df_output.set_index('idx')
添加更多标题列:
cond = (df['tag'] == 1) & (df[0].str.contains(':'))
header_dict = dict(df.loc[cond, 0].str.split(': ', n=1).values)
# {'Title': 'Whole case',
# 'Location': 'oyuri',
# 'From': 'Aki ',
# 'Date': '2018/11/30 (Friday) 11:55:29'}
for k,v in header_dict.items():
df_output[k] = v
谢谢你的帮助。它部分地起作用了。工作-数据现在在非工作-1列中分开。说明列为空2。上面缺少一些条目(感谢您的回答,Ferris.:)这是完全正常的工作,我们想添加什么标题内容以及??在Name列(From:i.e aki)Date In Date列和Description中的其余部分。我正在尝试这样做。非常感谢,FerrisI正在尝试使索引和名称列有所不同,但我无法使用上述代码做到这一点。您可以发布一个新问题,并描述细节。是的,我肯定会这样做。谢谢费里斯
obj = df_output['name'].str.strip().str.split(':\s*')
df_output['name'] = obj.str[-1]
df_output['idx'] = obj.str[0]
df_output = df_output.set_index('idx')
name date \
idx
1 Aki 2018/12/05 (Wed) 17:33:17
2 Aki 2018/12/06 (Thursday) 17:14:30
3 kano, etc. 2018/12/07 (Friday) 11:44:45
Description
idx
1 An approval notice has been sent.
2 I was notified by Mr. Id, the agent of the oth...
3 Please call rito.
cond = (df['tag'] == 1) & (df[0].str.contains(':'))
header_dict = dict(df.loc[cond, 0].str.split(': ', n=1).values)
# {'Title': 'Whole case',
# 'Location': 'oyuri',
# 'From': 'Aki ',
# 'Date': '2018/11/30 (Friday) 11:55:29'}
for k,v in header_dict.items():
df_output[k] = v