如何将txt文件解析为csv并修改格式

时间:2019-05-23 08:38:36

标签: python csv

有没有办法使用python提取我的animals.txt文件结果并将其转换为csv并以其他方式设置格式?

目前,animals.txt文件如下所示:

if(xx == 0 || xx == 0)
//    ^^

我希望CSV文件将其显示为:

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"']

其次是每个标题下方的结果

这是我写的脚本:

ID, NAME, PROJECT NAME, REPORT ID, REPORT NAME, KEYWORDS

3 个答案:

答案 0 :(得分:3)

一种简单的方法是在编写最终的csv之前,使用正则表达式进行解析并将其存储在dict中:

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!同样,默认写行也需要扭曲。

还使用\来删除引号。

答案 1 :(得分:1)

这应该有效:

fname = 'animals.txt'

with open(fname) as f:
    content = f.readlines()

content = [x.strip() for x in content]

output = 'ID, NAME, PROJECT NAME, REPORT ID, REPORT NAME, KEYWORDS\n'

line_output = ''
for i in range(0, len(content)):
    if content[i]:
        line_output += content[i].split(':-')[-1].strip() + ','
    elif not content[i] and not content[i - 1]:
        output += line_output.rstrip(',') + '\n'
        line_output = ''

output += line_output.rstrip(',') + '\n'

print(output)

答案 2 :(得分:-2)

这是Autoit(www.autoitscript.com)中的代码

Global $values_A = StringRegExp(FileRead("json.txt"), '[ID|NAME|KEYWORDS]:-\s(.*)?', 3)
For $i = 0 To UBound($values_A) - 1 Step +6
    FileWrite('out.csv', $values_A[$i] & ',' & $values_A[$i + 1] & ',' & $values_A[$i + 2] & ',' & $values_A[$i + 3] & ',' & $values_A[$i + 4] & ',' & $values_A[$i + 5] & @CRLF)
Next
相关问题