Еще перекроил
Не вижу нюанса -
runfile('D:/scripts/ParseByColumns.py', wdir='D:/scripts')
Traceback (most recent call last):
File "D:\scripts\ParseByColumns.py", line 56, in <module>
allElements = get_column(csv_rows_in_list, counter)
File "D:\scripts\ParseByColumns.py", line 23, in get_column
value_from_column.append(row[column])
IndexError: list index out of range
Делает одну итерацию, как я хочу
На второй, видимо, падает.
Ставлю красную точку: брейк в spyder, чтобы разобраться - компилятор его глотает и не останавливается?
Я поэтому не могу посмотреть, что происходит.
Подскажите, пожалуйста, где нюанс, вроде все правильно.
Да и не знаю пока, как дважды не обращаться к файлу, чтобы получить заголовки. Как-то некрасиво. Как это обойти, тоже не знаю.
import csv
def get_headers_of_the_file(file):
with open(file, 'r', newline='') as csvfile:
reader = csv.DictReader(csvfile)
headers = reader.fieldnames
for i in headers:
elementList = i.split(',')#здесь обязательно должна быть запятая
return elementList
def get_list_from_csv(file):
values = []
with open(file) as csv_file:
reader = csv.reader(csv_file, delimiter=',')
for row in reader:
values.append(row)
return values
def get_column(table:list, column:int):
value_from_column = []
for row in table:
value_from_column.append(row[column])
return value_from_column
def get_splitted_values(value_list, column:int):
temp = []
for i in value_list:
elementList = i.split(',')
temp.append(elementList[column])
return list(temp)
def get_sorted_values(value_list):
elements = sorted(value_list, key=lambda v: v[0])
return list(elements)
def get_unique_values(value_list):
res = []
[res.append(x) for x in value_list if x not in res]
return res
def set_id_for_value(value_list):
temp = enumerate(value_list,1)
return list(temp)
def write_elements_to_csv(value_list, header):
# temp = set(value_list) because this is tuple - would not sort
with open(f"D:\\out\\{header}.csv", "w", newline='') as file:
writer = csv.writer(file, delimiter=',')
writer.writerows(value_list)
csvHeaders = get_headers_of_the_file("D:\\out\\cars.csv")
counter = 0
for i in csvHeaders:
csv_rows_in_list = get_list_from_csv("D:\\out\\cars.csv")
allElements = get_column(csv_rows_in_list, counter)
splited_values = get_splitted_values(allElements, counter)
sorted_vaues = get_sorted_values(splited_values)
unique_values = get_unique_values(sorted_vaues)
with_id_values = set_id_for_value(unique_values)
write_elements_to_csv(with_id_values, i)
counter = counter + 1