python - 如何将txt文件解析为csv并修改格式
问题描述
有没有办法可以使用 python 来获取我的 animals.txt 文件结果并将其转换为 csv 并以不同的方式格式化它?
目前,animals.txt 文件如下所示:
ID:- 512
NAME:- GOOSE
PROJECT NAME:- Random
REPORT ID:- 30321
REPORT NAME:- ANIMAL
KEYWORDS:- ['"help,goose,Grease,GB"']
ID:- 566
NAME:- MOOSE
PROJECT NAME:- Random
REPORT ID:- 30213
REPORT NAME:- ANIMAL
KEYWORDS:- ['"Moose, boar, hansel"']
我希望 CSV 文件将其呈现为:
ID, NAME, PROJECT NAME, REPORT ID, REPORT NAME, KEYWORDS
随后是每个标题下方的结果
这是我写的一个脚本:
import re
import csv
with open("animals.txt") as f: text = f.read()
data = {}
keys = ['ID', 'NAME', 'PROJECT NAME', 'REPORT ID', 'REPORT NAME', 'KEYWORDS']
for k in keys:
data[k] = re.findall(r'%s:- (.*)' % k, text)
csv_file = 'out.csv'
with open(csv_file, 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=keys)
writer.writeheader()
for x in data:
writer.writerow(x)
解决方案
一个简单的方法是使用正则表达式进行解析并将它们存储在一个字典中,就在你编写最终的 csv 之前:
import re
# `text` is your input text
data = {}
keys = ['ID', 'NAME', 'PROJECT NAME', 'REPORT ID', 'REPORT NAME', 'KEYWORDS']
for k in keys:
data[k] = re.findall(r'%s:- (.*)' % k, text)
对于 CSV:
import csv
csv_file = 'out.csv'
with open(csv_file, 'w') as csvfile:
writer = csv.writer(csvfile, quoting=csv.QUOTE_NONE, escapechar='\\')
writer.writerow(data.keys())
for i in range(len(data[keys[0]])):
writer.writerow([data[k][i] for k in keys])
以 csv 格式输出:
ID,NAME,PROJECT NAME,REPORT ID,REPORT NAME,KEYWORDS
512,GOOSE,Random,30321,ANIMAL,['\"help\,goose\,Grease\,GB\"']
566,MOOSE,Random,30213,ANIMAL,['\"Moose\, boar\, hansel\"']
请注意,我使用re.M
了多行模式,因为您的文本中有一个技巧,可以防止匹配ID
两次!还需要扭曲默认写入行。
也用于\
转义引号。
推荐阅读
- django - 从 django.contrib.auth.models 导入后的 Django AppRegistryNotReady 异常
- reactjs - 在 Array.prototype.map() 中解构对象属性
- pandas - 如果列是字符串的子字符串,熊猫将获得行
- sql - 无法在 SQL Server 的表中插入记录
- ios - 按需资源 .. 无效标签“请求的应用程序数据不存在。”
- python - ValueError:x、y 和格式字符串不得为 None 泰勒正弦
- java - 所以我正在尝试使用 gson 创建这个 json 文件
- python-3.x - 理解 Python Nextion Display - Page Change
- android - 如何检查启用或禁用的可访问性,然后在android中相应地更改视图?
- javascript - 每 4 个索引后的数组的 concat 数组