Объединить несколько строк CSV в 1 в Python - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь связаться со строками CSV.Я попытался преобразовать строки CSV в список по пандам, но к нему добавляются значения 'nan', так как некоторые файлы пусты.Кроме того, я попытался использовать zip, но он объединяет значения столбцов.

    with open(i) as f:
        lines = f.readlines()
        res = ""
        for i, j in zip(lines[0].strip().split(','), lines[1].strip().split(',')):
            res += "{} {},".format(i, j)
            print(res.rstrip(','))
        for line in lines[2:]:
            print(line)

У меня есть данные, как показано ниже,

Входные данные: - Входные данные CSV

Ожидаемый результат: - Выходные данные CSV

Количество строк больше 3, здесь приведена только выборка.Предложите способ решения вышеуказанной задачи без создания нового файла.Пожалуйста, укажите на любую конкретную функцию или образец кода.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Предполагается, что ваша первая строка содержит правильное количество столбцов.Он будет читать весь файл, игнорировать пустые данные (",,,,,,") и накапливать достаточно точек данных, чтобы заполнить одну строку, а затем переключиться на следующую строку:

Записать тестовый файл:

with open ("f.txt","w")as f:
    f.write("""Circle,Year,1,2,3,4,5,6,7,8,9,10,11,12
abc,2018,,,,,,,,,,,,
2.2,8.0,6.5,9,88,,,,,,,,,,
55,66,77,88,,,,,,,,,,
5,3.2,7

def,2017,,,,,,,,,,,,
2.2,8.0,6.5,9,88,,,,,,,,,,
55,66,77,88,,,,,,,,,,
5,3.2,7

""")

Файл теста процесса:

data = [] # all data
temp = [] # data storage until enough found , then put into data 

with open("f.txt","r") as r:
    # get header and its lenght
    title = r.readline().rstrip().split(",")
    lenTitel = len(title)
    data.append(title)

    # process all remaining lines of the file
    for l in r:
        t = l.rstrip().split(",") # read one lines data
        temp.extend( (x for x in t if x) ) # this eliminates all empty ,, pieces even in between 
        # if enough data accumulated, put as sublist into data, keep rest
        if len (temp) > lenTitel:
            data.append( temp[:lenTitel] )
            temp = temp [lenTitel:]
    if temp:
        data.append(temp)

print(data)

Вывод:

[['Circle', 'Year', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], 
 ['abc', '2018', '2.2', '8.0', '6.5', '9', '88', '55', '66', '77', '88', '5', '3.2', '7'], 
 ['def', '2017', '2.2', '8.0', '6.5', '9', '88', '55', '66', '77', '88', '5', '3.2', '7']]

Примечания:

  • в вашем файле не может быть начальных символов новой строки, иначеневерный размер заголовка.
  • переходы между строк не наносят вреда
  • у вас не может быть "пустых" ячеек - они удаляются
0 голосов
/ 18 сентября 2018

Пока ничего странного в файлах не происходит, что-то вроде этого должно работать:

with open(i) as f:
  result = []
  for line in f:
    result += line.strip().split(',')
  print(result)
...