Форум сайта python.su
Всем привет, я пробую так
def take_columns_from_csv(): ##Open the file infile = open('D:\\proc\\sales_result_sliced.csv', 'r') outfile = open('D:\\proc\\result.csv', 'w', newline='') lines = infile.readlines() counter = 1 for line in lines[0:]: #skip the first line, which is the header sline = line.strip() #get rid of trailing newline characters at the end of the line sline = sline.split(',') # separates line into a list of items. ',' tells it to split the lines at the commas #sline.append((counter, sline[0], sline[3])) #print(sline) nameString = ', '.join((sline[0], sline[1])) outfile.write(nameString) counter = counter + 1 #close the file infile.close() outfile.close()
Офлайн
В целом, я только что научился это делать
def take_head_of_file_four(): with open('D:\\proc\\sales_result_sliced.csv', 'r', newline='') as csvfile, open("D:\\proc\\result.csv", "w", newline='') as out_file: reader = csv.DictReader(csvfile) writer = csv.writer(out_file) for row in reader: writer.writerow((row['Company Code'], row['Order Number']))
Офлайн
Пробую подойти - так не получается вообще со скриптом
Падает
def take_head_of_file_four(): with open('D:\\proc\\sales_result_sliced.csv', 'r', newline='') as csvfile, open("D:\\proc\\result.csv", "w", newline='') as out_file: reader = csv.DictReader(csvfile) #fieldnames = ['Company Code', 'Order Number'] fieldnames = ['Company Code', 'Order Number'] writer = csv.DictWriter(out_file, fieldnames=fieldnames) writer.writeheader() for row in reader: writer.writerow((row['Company Code'], row['Order Number']))
Офлайн
Вообщем, получилась смесь, которую я решить пока не могу
Добавил счетчик для нумерации колонок слева
А заголовки выводить как - не могу понять. Хелп.
def take_head_of_file_four(): with open('D:\\proc\\sales_result_sliced.csv', 'r', newline='') as csvfile, open("D:\\proc\\result.csv", "w", newline='') as out_file: reader = csv.DictReader(csvfile) writer = csv.writer(out_file) counter = 1 fieldnames = ['Company Code', 'Order Number'] writer = csv.DictWriter(out_file, fieldnames=fieldnames) writer.writeheader() for row in reader: writer.writerow((counter, row['Company Code'], row['Order Number'])) counter +=1 #close the file csvfile.close() out_file.close()
Офлайн
del
Отредактировано py.user.next (Март 8, 2021 22:01:44)
Офлайн
Работает, но не знаю, но код не умеет перенаименовывать заголовки
def take_head_of_file_four(): with open('D:\\proc\\sales_result_sliced.csv', 'r', newline='') as csvfile, open("D:\\proc\\result.csv", "w", newline='') as out_file: reader = csv.DictReader(csvfile) writer = csv.writer(out_file) counter = 1 fieldnames = ['Company Code', 'Order Number'] writer = csv.DictWriter(out_file, fieldnames=fieldnames) writer.writeheader() for row in reader: writer.writerow({'Company Code': row['Company Code'], 'Order Number': row['Order Number']}) counter +=1 #close the file csvfile.close() out_file.close()
Офлайн
Для работы с CSV в питоне используй модуль csv. Этот модуль знает, как устроены CSV данные и что в них может быть вообще. Даже ты не знаешь CSV настолько хорошо, как этот модуль. Поэтому отдай ему свои данные, он разберётся с ними правильно.
Пример использования модуля csv
>>> import csv >>> import sys >>> >>> writer = csv.writer(sys.stdout) >>> writer.writerows([['header1', 'header2', 'header3'], [1, 2, 3], ['4', '5', '6'], [None, 'x', 123]]) header1,header2,header3 1,2,3 4,5,6 ,x,123 >>>
AntonpythonЗаголовки в CSV-формате - это просто первая строка данных. Так что лучше их вообще убирать, так как они всегда будут мешать работать с данными чисто. На заголовке никогда не написано, что это заголовок, а не данные. Но если заголовки тебе нужны (для чтения базы данных через Excel или LibreOffice Writer), то можешь просто первую строку данных сформировать и записать через csv.write(). Ничем они от данных в этом плане не отличаются.
А заголовки выводить как - не могу понять.
Офлайн
Вроде, что-то получилось
def take_head_of_file_four(): with open('D:\\proc\\sales_result_sliced.csv', 'r', newline='') as csvfile, open("D:\\proc\\result.csv", "w", newline='') as out_file: reader = csv.DictReader(csvfile) fieldnames = ['','Company', 'Order Number'] writer = csv.DictWriter(out_file, fieldnames=fieldnames) counter = 1 writer.writeheader() for row in reader: writer.writerow({'': counter, 'Company': row['Company Code'], 'Order Number': row['Order Number']}) counter +=1 #close the files csvfile.close() out_file.close()
Офлайн
И как вообще взять каждую колонку, оставить только уникальные значения, отсортировать их по возрастанию слева добавить нумерацию и, типа, только потом записать?
Могу в следующую тему забросить.
Спасибо.
Офлайн
AntonpythonЕсли открыли файл с with то close не нужен.
Проверьте меня на “говнокод”
for counter,obj in enumerate(collectio): .....
Antonpython
И как вообще взять каждую колонку, оставить только уникальные значения, отсортировать их по возрастанию слева добавить нумерацию и
data={"IBM":{"cost":20,"some":True}, "GOOGLE":{"cost":30,"some":False}, }
Офлайн