CSV для заголовков и разнесение результатов в пользовательский класс - PullRequest
0 голосов
/ 04 сентября 2018
class SalesRecord():
def __init__(self, *args):
    self.ProductID = args[0]
    self.Date = args[1]
    self.StoreNum = args[2]
    self.Units = args[3]
    self.PricePerUnit = args[4]
    self.Total = args[5]



salesreader = csv.reader(salesfile)
e1 = []
e2 = []
index = 0
for row in salesreader:
    if index != row:
        e2.append(SalesRecord(*row))
    else:
        e1.append(row)

Я пытаюсь взять первую строку набора данных, назначить заголовки столбцов как e1 и разобрать детализацию на e2. Я борюсь с итерацией позиции списка.

1 Ответ

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

Вы можете использовать функцию next() для чтения одной строки из файла CSV. Таким образом, вам не нужно добавлять специальную логику внутри цикла for для обработки первой строки. Если вы используете Python 3.x, вы должны открыть CSV с параметром newline=''.

import csv

class SalesRecord():
    def __init__(self, *args):
        self.ProductID = args[0]
        self.Date = args[1]
        self.StoreNum = args[2]
        self.Units = args[3]
        self.PricePerUnit = args[4]
        self.Total = args[5]

    def __str__(self):
        # Text to display if SalesRecord is printed
        return "SalesRecord:\n  ProductID {}\n  Date {}\n  StoreNum {}\n  Units {}\n  PricePerUnit {}\n  Total {}".format(
            self.ProductID, self.Date, self.StoreNum, self.Units, self.PricePerUnit, self.Total)


with open('input.csv', newline='') as salesfile:
    salesreader = csv.reader(salesfile)

    # Construct a SalesRecord using the CSV header elements
    e1 = SalesRecord(*next(salesreader))       

    # Read the remaining rows into e2
    e2 = []

    for row in salesreader:
        e2.append(row)

print(e1)
print(e2)

Итак, если у вас был файл input.csv, который содержал, например:

col1,col2,col3,col4,col5,col6
1,2,3,4,5,6
a,b,c,d,e,f

Это выведет следующий вывод:

SalesRecord:
  ProductID col1
  Date col2
  StoreNum col3
  Units col4
  PricePerUnit col5
  Total col6
[['1', '2', '3', '4', '5', '6'], ['a', 'b', 'c', 'd', 'e', 'f']]

Примечание: функция __str__() - это способ указать Python, что отображать, если ваш класс напечатан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...