Чтение CSV-файла с несколькими строками, содержащими заголовок - PullRequest
0 голосов
/ 09 мая 2020

У меня есть файлы CSV, которые являются выходными данными, созданными инструментом. Каждый файл содержит несколько наборов данных, разделенных условием, за которым следует заголовок и данные. Я хочу сделать «условие» столбцом для соответствующего набора данных и прочитать файл. Результатом может быть один файл или файл для каждого набора данных. Условие, заголовки и данные разделены табуляцией в CSV-файле.

Я даже не могу понять, как это начать. У меня есть снимок экрана с примерами входов и выходов. Любые идеи или указания по этому поводу будут оценены. Спасибо! Изображение примера ввода и желаемого результата

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Это решит вашу проблему

import csv

file = open('test.tsv', 'r')
lines = file.readlines()
# lines = ['Condition 1\t\n', 'Header 1\tHeader 2\n', '2\t3\n', '2\t3\n', '2\t3\n', 'Condition 2\t\n', 'Header 1\tHeader 2\n', '2\t3\n', '2\t3\n', '2\t3\n']
current_condition = ''
final_output = [['Header 1', 'Header 2', 'condition']]
for i in range(0,len(lines)):
    row = lines[i].rstrip().split('\t')
    if len(row) == 1:
        current_condition = row[0]
    elif row[0] != 'Header 1' and row[1] != 'Header 2':
        final_output.append([
            row[0],
            row[1],
            current_condition
        ])

fout = open('output.csv', 'w')
writer = csv.writer(fout)
writer.writerows(final_output)
0 голосов
/ 09 мая 2020

Есть одно из возможных решений:


#Open the fist file
mfile = open('file.csv', 'r')
string = mfile.read()
mfile.close()
# Split on the line breaks
string = string.split("\n")



#CAUTION if you CSV file uses ";" instead "," change it on the code!

condition = ''
newString = []
for i in range(len(string)):
    # Check if condition is trully oneline
    if(len(string[i].split(',')) ==1):
        condition = string[i]
        #Change the string 'header1,header2 to you header
    elif (string[i] == 'header1,header2'):
        pass
    else:
        newString.append(string[i] + ","+condition)

mfile = open('outfile.csv', 'w')
mfile.write('header1,header2\n')
for i in newString:
    mfile.write(i + '\n')

Я использовал это как содержимое file.csv (ввод):

condidtion1
header1,header2
2,3
2,3
2,3
2,3
condidtion2
header1,header2
3,4
3,4
3,4
3,4
3,4
3,4

После запуска кода, файл outfile.csv выглядит так (вывод):

header1,header2
2,3,condidtion1
2,3,condidtion1
2,3,condidtion1
2,3,condidtion1
3,4,condidtion2
3,4,condidtion2
3,4,condidtion2
3,4,condidtion2
3,4,condidtion2
3,4,condidtion2
...