CSV-файл неправильно заполнен данными - PullRequest
0 голосов
/ 02 октября 2018
import csv
TextFileContent = open('tickets.txt')
with open('example4.csv', 'w') as csvfile:
    fieldnames = ['Author', 'ticket number', 'Revision']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for TextLine in TextFileContent:
        if 'Revision:' in TextLine:
            tmp=TextLine.replace('Revision:', "")
            print(tmp)
            writer.writerow({'Revision': tmp})
        elif 'Author:' in TextLine:
            tmp=TextLine.replace("Author:", "")
            print(tmp)
            writer.writerow({'Author': tmp})
        elif 'Contributes to:' in TextLine:
            tmp=TextLine.replace("Contributes to:", "")
            print(tmp)
            writer.writerow({'ticket number': tmp})

Привет всем, что я разработал выше сценарий Python для извлечения деталей "Автор", "Билет" и "редакция" из текстового файла, а затем заполнил эту информацию в файл CSV.

Теперь явозможность извлекать всю информацию, но данные не правильно заполнены в файле CSV.

содержание текстового файла примерно так:

Revision: 22904
Author: Userx
Contributes to: CF-1159


Revision: 22887
Author: Usery
Contributes to: CF-955


Revision: 22884
Author: UserZ
Contributes to: CPL-7768

И я хочу получить результат в CSV-файле, как показано ниже

Author  ticket number   Revision
Userx    CF-1159        22904
Usery    CF-955         22887
UserZ    CPL-7768       22884

1 Ответ

0 голосов
/ 02 октября 2018

Ваш код записывает строку, как только находит любое поле , вместо ожидания, пока он не прочитает полный набор полей.Следующее редактирование ожидает полного набора и затем записывает строку.

with open('/tmp/out.csv', 'w') as csvfile:
    fieldnames = ['Author', 'ticket number', 'Revision']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    row = {}
    for TextLine in TextFileContent:
        if 'Revision:' in TextLine:
            row['Revision'] = TextLine.replace('Revision: ', "")
        elif 'Author:' in TextLine:
            row['Author'] = TextLine.replace("Author: ", "")
        elif 'Contributes to:' in TextLine:
            row['ticket number'] = TextLine.replace("Contributes to: ", "")
        if len(row) == len(fieldnames):
            writer.writerow(row)
            row = {}

Обратите внимание, что это не будет работать правильно, если все записи не содержат все поля.

...