Я пытаюсь связаться со строками CSV. Я попытался преобразовать строки CSV в список с помощью pandas, но он получает добавленные значения 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, здесь приведен только образец. Предложите способ решения вышеуказанной задачи без создания нового файла. Укажите конкретную функцию или образец кода.

0
Swapnil 18 Сен 2018 в 20:38

2 ответа

Лучший ответ

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

Напишите тестовый файл:

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
Patrick Artner 18 Сен 2018 в 18:13

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

with open(i) as f:
  result = []
  for line in f:
    result += line.strip().split(',')
  print(result)
0
Jeremy 18 Сен 2018 в 17:48