В python 2.7 – Как читать данные из csv, переформатировать данные и писать в новый csv

Я программирую noob, и я застреваю … Моя цель – открыть файл csv (экспорт из программы A), переформатировать данные и записать его в новый файл csv (для импорта программы B) , Я знаю, что мой код не очень хорош, хотя он работает до тех пор, пока не будет записан в новый файл csv. Он записывает только последнюю строку данных из старого csv.

import csv print 'Enter file location or press enter for default location.' aPath = raw_input('> ') # user path to file if aPath == '': aPath = '/default/path/to/file' # default path aFile = raw_input('Enter file name: ') # user file name if aFile == '': aFile = 'orginal.csv' # default file name myCSV = csv.DictReader(open(aPath + aFile, 'r'), delimiter=',') print myCSV.fieldnames # verify fieldnames for p in myCSV: w = csv.writer(open("output.csv", "w")) try: p = dict((k, v) for k, v in p.iteritems() if v.lower() != 'null') except AttributeError, e: print e print p raise Exception() # reformats the columns of data for the output.csv pID = p.get('Last Name')[-4:] pName = p.get('Last Name')[:-4].strip() + ', ' + p.get('First Name') pDate = p.get('Start Time')[:-5] pBlank = p.get('') pCourse = p.get('Assigned Through') pScore = p.get('Score')[:-1] # verifies the new columns print pID, pName, pDate, pBlank, pCourse, pBlank, pBlank, pScore # NOT working...Only writes the last row of the orginal.csv to output.csv w.writerow([pID, pName, pDate, pBlank, pCourse, pBlank, pBlank, pScore]) 

3 Solutions collect form web for “В python 2.7 – Как читать данные из csv, переформатировать данные и писать в новый csv”

Следующий модифицированный код должен работать:

 import csv print 'Enter file location or press enter for default location.' aPath = raw_input('> ') # user path to file if aPath == '': aPath = '/default/path/to/file' # default path aFile = raw_input('Enter file name: ') # user file name if aFile == '': aFile = 'orginal.csv' # default file name myCSV = csv.DictReader(open(aPath + aFile, 'r'), delimiter=',') print myCSV.fieldnames # verify fieldnames with open("output.csv", "wb") as ofile: w = csv.writer(ofile) for p in myCSV: try: p = dict((k, v) for k, v in p.iteritems() if v.lower() != 'null') except AttributeError, e: print e print p raise Exception() # reformats the columns of data for the output.csv pID = p.get('Last Name')[-4:] pName = p.get('Last Name')[:-4].strip() + ', ' + p.get('First Name') pDate = p.get('Start Time')[:-5] pBlank = p.get('') pCourse = p.get('Assigned Through') pScore = p.get('Score')[:-1] # verifies the new columns print pID, pName, pDate, pBlank, pCourse, pBlank, pBlank, pScore # NOT working...Only writes the last row of the orginal.csv to output.csv w.writerow([pID, pName, pDate, pBlank, pCourse, pBlank, pBlank, pScore]) 

Вещи, которые мы изменили:

  1. Мы использовали оператор с. При работе с открывающимися и закрывающимися файлами использование with помощью общепринятого протокола следует соблюдать, если иное не применимо, поскольку оно, в частности, эффективно закрывает файлы.
  2. Используйте wb вместо w только как ваш второй аргумент для open . Это позволит вам открыть файл в бинарном режиме записи. См. Это для справки.

Надеюсь это поможет.

Вы повторно открываете файл и перезаписываете его на каждом проходе через for p in myCSV цикла for p in myCSV . Вам нужно создать w один раз перед входом в цикл for.

Я боюсь, что вы переписываете свой выходной файл на каждой итерации … Вы должны просто взять строку

 w = csv.writer(open("output.csv", "w")) 

вне цикла:

 w = csv.writer(open("output.csv", "w")) try: for p in myCSV: try: ... w.writerow([pID, pName, pDate, pBlank, pCourse, pBlank, pBlank, pScore]) finally: w.close() 

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

  • Ошибка сегментации при одновременном вызове функции C с API Python C
  • python на окнах 10
  • Нет Ошибка / ошибка Python?
  • Внедрение QProgressBar в класс
  • Ошибка при создании проекта Scrapy через startproject
  • Неустранимая ошибка: #include <stdio.h>, сгенерированная после команды «pip install mysql-python»
  • Как запустить функции behave-django в PyCharm?
  • Хэш для лямбда-функции в Python
  •  
    Interesting Posts for Van-Lav

    построение результатов иерархической кластеризации ontop матрицы данных в python

    Изменяйте каждый цикл for в цикле функции, чтобы обработка ошибок выполнялась автоматически после каждой неудачной итерации

    Django для социальных сетей

    Как выйти из ipdb во время посмертной отладки?

    Анализ бинарных файлов MIPS: существует ли библиотека Python для разбора двоичных данных?

    SQLAlchemy не будет обновлять мою базу данных

    Django: сохраняйте фильтр с помощью paginator

    Как добавить строку заголовка в pandas DataFrame

    Python: найдите эквивалентную суррогатную пару от символа unicode без BMP

    Обучение sklearn LogisticRegression классификатор без всех возможных меток

    Сбросить ядро ​​ipython

    самый быстрый способ преобразования массива numstring bitstring в целую базу 2

    self.user.user_id в примере ошибки при загрузке приложения FB

    python-запросы не могут войти на сайт

    Удаление тегов span из супа BeautifulSoup / Python

    Python - лучший язык программирования в мире.