Конвертировать из .txt в .csv файл с горизонтальной ориентацией python

#python #csv #txt

#python #csv #текст

Вопрос:

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

Я хочу создать файл .csv, где в первой строке будут записаны имена (ключи, значения), а ниже — значения каждого имени. Это должно быть что-то вроде этого: пример файла CSV

Комментарии:

1. у вас есть один текстовый файл или два для ключей и значений? обновить вопрос

2. один текстовый файл и приведенный выше пример — это именно то, что находится внутри.

Ответ №1:

Поскольку текстовый файл состоит из двух строк, после импорта он отображается как строка, поэтому вот что я бы сделал

 import re 
f = open('textfile.txt', 'r')

#new output file
new_csv = open('output.csv' 'w')

text = f.read()
ks = text.split('n')[0]
ve = text.split('n')[1]
keys = re.findall(r"'(. ?)'", str(ks))
values = re.findall(r"'(. ?)'", str(ve))
for key, value in zip(keys, values):
    new_csv.write(key ',' value 'n')

new_csv.close()
  

Ответ №2:

Попробуйте это:

 import csv

k = ['0.0', '0.25', '0.5', '0.75', '1.0', '1.25']
v = [5, 46, 597, 2882, 5398, 4]

with open("output.csv", 'w') as file:
    wr = csv.writer(file)
    wr.writerow(["keys", "values"])
    for row in zip(k, v):
        wr.writerow(row)
  

Вывод .csv файла:

 keys,values
0.0,5
0.25,46
0.5,597
0.75,2882
1.0,5398
1.25,4
  

РЕДАКТИРОВАТЬ: Это рабочий код (то есть полный взлом) для образца данных из того файла, который вы показали. Я разбираю его как есть, поэтому вам, возможно, придется отредактировать код, если данные изменятся.

Содержимое data.txt :

 keys(['0.0', '10.0', '20.0', '30.0'])
values([43430, 156, 3, 1])
  

Код:

 import ast
import csv
import re

p = re.compile(r"((.*))")

with open("data.txt") as f:
    data = f.readlines()

parsed = [
    ast.literal_eval(
        ''.join(i for i in re.search(p, l.strip()).groups())
    ) for l in data
]


with open("output.csv", 'w') as file:
    wr = csv.writer(file)
    wr.writerow(["keys", "values"])
    for row in zip(*parsed):
        wr.writerow(row)

  

Содержимое output.csv файла.

 keys,values
0.0,43430
10.0,156
20.0,3
30.0,1

  

Комментарии:

1. Спасибо за быстрый ответ, но это жестко. Выше была просто копия того, что было внутри небольшого .txt файла. Он может быть намного больше с множеством разных имен и значений.

2. Покажите мне пример этого файла, пара строк будет в самый раз.

3. ключи([‘0.0’, ‘10.0’, ‘20.0’, ‘30.0’]) значения([43430, 156, 3, 1]) Это именно то, что находится внутри одного небольшого файла .txt

4. Это на одной строке? Это две строки?

5. 2 строки, но в комментарии невозможно сделать 2 строки. Извините.