首页 > 解决方案 > 如何将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)

标签: pythoncsv

解决方案


一个简单的方法是使用正则表达式进行解析并将它们存储在一个字典中,就在你编写最终的 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两次!还需要扭曲默认写入行。

也用于\转义引号。


推荐阅读