Преобразование .txt с данными из нескольких строк в .csv - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь преобразовать данные из файла .txt в файл .csv, используя Python.Мой .txt файл в настоящее время отформатирован примерно так:

www.thing.com
Thing
2010
linkedin.com/company/thing
www.hello.com
Hello
1999
linkedin.com/company/hello
...

Я хочу программу, которая прочитает 4 строки о «Вещи» и сделает это в строку.Затем он прочитает 4 строки о «Hello» и превратит их в строку, где каждый элемент будет в том же столбце, что и строка о «Thing».

"www.thing.com,Thing,2010,linkedin.com/company/thing"
"www.hello.com,Hello,1999,linkedin.com/company/hello"
...

Вот что у меня такдалеко (что не так уж много):

import csv

text_file = open("document.txt", "r")

with open('output.csv', 'wb') as mycsv:
    filewriter = csv.writer(mycsv)

    mycsv.writerow(["company", "name", "date", "linkedin"])

    for line in text_file:
        URL = line
        line = next(text_file)
        name = line
        line = next(text_file)
        date = line
        line = next(text_file)
        LinkedIn = line
        line = next(text_file)
        mycsv.writerow(URL, name, date, LinkedIn)

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

Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вот еще один способ решить вашу проблему:

def group_data(table, n=4):
    # Group your table's data by n elements
    yield from [table[k: k + n] for k in range(0, len(table), n)]


def write_csv(file_name, data):
    with open(file_name, 'a') as f:
        # Loop over your grouped data
        for elm in data:
            # Write the grouped elemenets into a file
            f.write(','.join(k for k in elm) + '\n')



a = '''www.thing.com
Thing
2010
linkedin.com/company/thing
www.hello.com
Hello
1999
linkedin.com/company/hello'''

data = [elm for elm in a.split('\n')]
grouped = group_data(data)
write_csv('csv_file.csv', grouped)

Вывод:

www.thing.com,Thing,2010,linkedin.com/company/thing
www.hello.com,Hello,1999,linkedin.com/company/hello

NB: Если ваши данные не могут быть сгруппированы по фиксированному номеру, тогда вы должны подумать о новом алгоритме, чтобы получить желаемый результат.Или вы можете увидеть, есть ли повторяющийся шаблон, который вы можете использовать для создания группы.В противном случае этот текущий код будет работать с вашим текущим фрагментом текста.

0 голосов
/ 05 февраля 2019

Вы можете сгруппировать входной файл по 4 строкам, сжав итератор входного файла 4 раза:

from itertools import repeat
csv.writer(mycsv).writerows([[i.rstrip() for i in r] for r in zip(*repeat(text_file, 4))])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...