2017-02-12 9 views
-1

Я новичок в Python, так что за вашу помощь!Python3: разделить список и сохранить как файл - как?

Я хочу сказать, Python, чтобы сделать большой список .csv и разделить его на множество мелких списков только два столбцов

  1. Возьмите этот файл .csv
  2. Всегда использовать колонку «год», который первый столбец
  3. Затем следует всегда следующий столбец (для цикла?), начиная с столбца 2, который является «Object1», а затем столбцом 3, который является «Object2» и т. д. ...
  4. Сохраните каждый список как .csv - теперь содержит только два столбца - и назовите его после второго столбца (fe «Object1»)

До сих пор я до этого:

import csv 
object = 0 

f = open("/home/Data/data.csv") 

csv_f = csv.reader(f, delimiter=';', quotechar='|') 

writer = csv.writer(csv_f) 

for row in csv_f: 
    writer("[0],[object]") 

    object += 1 

f.close() 

ответ

1

Ваш код пытается открыть тот же файл для чтения и записи, которые могут привести к неожиданным результатам.

Подумайте о своей проблеме как о серии шагов; один из способов подойти к решению проблемы является:

  1. Откройте большой файл
  2. Прочитайте первую строку файла, который содержит заголовки столбцов.
  3. Go через заголовки столбцов (первая строка вашего большого файла CSV), пропуская первый, затем:
    1. Для каждого заголовка столбца, создайте новый файл CSV, где имя файла это имя из колонка.
    2. Возьмите значение первого столбца плюс значение столбца, которое вы сейчас читаете, и напишите его в файл.
    3. Повторите, пока все заголовки столбцов читаются
    4. Закройте файл
  4. Закрыть большой файл.

Вот тот же подход, что и выше, пользуясь возможностями чтения CSV Питона:

import csv 

with open('big-file.csv') as f: 
    reader = csv.reader(f, delimiter=';', quotechar='|') 
    titles = next(reader) 
    for index, column_name in enumerate(titles[1:]): 
     with open('{}.csv'.format(column_name), 'w') as i: 
     writer = csv.writer(i, delimiter=';', quotechar='|') 
     for row in reader: 
      writer.writerow((row[0],row[index+1])) 
     f.seek(0) # start from the top of the big file again 
     next(reader) # skip the header column 

 Смежные вопросы

  • Нет связанных вопросов^_^