Как записать список в csv файл python
Перейти к содержимому

Как записать список в csv файл python

  • автор:

Как записать list (список?) в csv файл?

Пытаюсь записать в csv файл такую конструкцию: Город; Широта; Долгота;
Однако, либо записывает только последний из списка город и широту-долготу столбиком (3 строчки); либо при переписывании кода пишет что нельзя list в csv превратить.

import pandas, os #os.listdir() import geopy import array dir(geopy) import csv def csv_writer(data, path): with open(path, "w", newline='') as csv_file: writer = csv.writer(csv_file, delimiter=';') for line in data: writer.writerow(line) arr = ["Токио", "Лондон", "Берлин", "Череповец"] from geopy.geocoders import Nominatim i=0 for arr[i] in arr: nom=Nominatim() n=nom.geocode(arr[i])#city data = [arr[i],n.latitude, n.longitude] #вот эту штуку в csv не переводит #print(arr[i],n,n.latitude, n.longitude) #print(arr[i], ";",n.latitude,";", n.longitude) # а принтует нормально Город-Широта-Долгота. #print(arr[i],n.latitude, n.longitude)#coordinates #print(data) df = pandas.DataFrame(data) df.to_csv("./ output.csv", index=False, header=False) i = i +1
  • Вопрос задан более трёх лет назад
  • 2716 просмотров

3 комментария

Простой 3 комментария

Модуль csv — чтение и запись CSV файлов

Python 3 логотип

Формат CSV (Comma Separated Values) является одним из самых распространенных форматов импорта и экспорта электронных таблиц и баз данных. CSV использовался в течение многих лет до того, как был стандартизирован в RFC 4180. Запоздание четко определенного стандарта означает, что в данных, создаваемых различными приложениями, часто существуют незначительные различия. Эти различия могут вызвать раздражение при обработке файлов CSV из нескольких источников. Тем не менее, хотя разделители, символы кавычек и некоторые другие свойства различаются, общий формат достаточно универсален. Значит, возможно написать один модуль, который может эффективно манипулировать такими данными, скрывая детали чтения и записи данных от программиста.

Функции обработки CSV-файлов

csv.reader(csvfile, dialect=’excel’, **fmtparams) — возвращает объект reader, который построчно итерирует csvfile. Если csvfile является файловым объектом, то его нужно открыть с параметром newline=». Дополнительный параметр dialect используется для определения ряда параметров, характерных для специфического CSV диалекта. Он может быть подклассом Dialect или одной из строк, возвращаемой функцией list_dialects(). Также могут передаваться дополнительные ключевые аргументы fmtparams для переопределения отдельных параметров форматирования в текущем диалекте.

Каждая строка, считанная из файла csv, возвращается в виде списка строк. Автоматическое преобразование типов данных не выполняется, если не указан параметр формата QUOTE_NONNUMERIC (в этом случае все поля без кавычек преобразуются в числа с плавающей точкой).

Короткий пример использования:

csv.writer(csvfile, dialect=’excel’, **fmtparams) — возвращает объект writer, конвертирующий пользовательские данные в CSV-файл csvfile. csvfile может быть любым объектом с методом write(). Если csvfile является файловым объектом, то его нужно открыть с параметром newline=». Параметры dialect и fmtparams идентичны параметрам в функции csv.reader.

Необходимые методы экземпляра класса writer:

csvwriter.writerow(row) — записывает данные, представляющие одну строку CSV в файл, форматируя согласно текущему диалекту writer.

csvwriter.writerows(rows) — записывает данные, представляющие несколько строк CSV в файл, форматируя согласно текущему диалекту writer.

Пример использования writer :

csv.field_size_limit([new_limit]) — текущий максимальный размер поля. Если задан new_limit, то он становится новым макс. размером.

class csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect=’excel’, *args, **kwds) — как reader, но отображает информацию о столбцах в словарь, ключи которого заданы в параметре fieldnames.

fieldnames это последовательность ключей. Если параметр опущен, в качестве ключей используются значения из первой строки файла. Если строка имеет больше полей, чем длина fieldnames , оставшиеся данные будут помещены в список с ключом из переменной restkey . Если строка имеет меньше полей, оставшиеся значения будут установлены в значение restval .

Остальные аргументы пробрасываются далее в экземпляр reader.

class csv.DictWriter(f, fieldnames, restval=», extrasaction=’raise’, dialect=’excel’, *args, **kwds) — как writer, но отображает словари в CSV-файл.

Обязательный параметр fieldnames — последовательность ключей, определяющие порядок, в котором значения из словаря будут записаны в строке CSV-файла f.

Параметр restval определяет значение в случае, если в словаре будет отсутствовать запись с данным ключом. Если словарь содержит лишние ключи, то поведение определяется параметром extrasaction . Если он ‘raise’, то выдаст ошибку. Если ‘ignore’, то такие ключи игнорируются.

Остальные аргументы пробрасываются далее в экземпляр writer.

Помимо методов writerow и writerows, DictWriter имеет также метод

DictWriter.writeheader() — записывает данные строки заголовка в CSV-файл, форматируя согласно текущему диалекту writer.

Пример использования DictWriter:

class csv.Dialect — для упрощения задания формата входных и выходных записей, конкретные параметры форматирования группируются в диалекты, подклассы csv.Dialect . Диалекты поддерживают следующие атрибуты:

Dialect.delimiter — разделитель столбцов в строке CSV-файла. По умолчанию ‘,’.

Dialect.quotechar — символ, использующийся для «склейки» поля, содержащего специальные символы, такие как delimiter, quotechar, или символы новой строки. По умолчанию используется значение ‘»‘.

Dialect.doublequote — как Dialect.quotechar , появляющийся внутри поля, должен экранироваться. Когда True, символ удваивается. Когда False, Dialect.escapechar используется как префикс к quotechar. По умолчанию True.

При записи файла, если doublequote=False и не установлен escapechar, выдаст ошибку при обнаружении quotechar в столбце.

Dialect.escapechar — символ, используемый writer для экранирования delimiter , если quoting установлен в QUOTE_NONE и quotechar , если doublequote=False . При чтении escapechar удаляет какое-либо особое значение со следующего символа. По умолчанию используется значение None, которое отключает экранирование.

Dialect.lineterminator — символы, используемые для завершения строки при записи. По умолчанию ‘\r\n’.

Dialect.skipinitialspace — если True, пробелы, непосредственно следующие за delimiter, игнорируются. Значение по умолчанию — False.

Dialect.strict — когда True, поднимает исключение если CSV файл не распознается. По умолчанию — False.

Dialect.quoting — контролирует, когда кавычки должны генерироваться writer и распознаваться reader. Он может принимать любые константы QUOTE_* и по умолчанию имеет значение QUOTE_MINIMAL.

csv.QUOTE_ALL — writer оборачивает в кавычки все поля.

csv.QUOTE_MINIMAL — writer оборачивает в кавычки только поля, содержащие специальные символы (delimiter, quotechar, lineterminator).

csv.QUOTE_NONNUMERIC — writer оборачивает в кавычки все поля, не являющиеся числами. reader преобразует все поля без кавычек к типу float.

csv.QUOTE_NONE — writer не оборачивает никакие поля в кавычки. Если в данных попадается delimiter или lineterminator, он предваряется символом escapechar, если установлен (исключение, если не установлен). reader не обрабатывает кавычки.

csv.register_dialect(name[, dialect[, **fmtparams]]) — связывает dialect с именем name. Подробности о диалектах см. в разделе «Диалекты и параметры форматирования»

csv.unregister_dialect(name) — удаляет связь диалекта с данным именем.

csv.get_dialect(name) — возвращает класс диалекта, свзанного с именем name.

csv.list_dialects() — список доступных диалектов. На данный момент это ‘excel’, ‘excel-tab’, ‘unix’.

Предустановленные диалекты

class csv.excel — диалект CSV-файла, обычно генерируемого программой Excel.

class csv.excel_tab — диалект CSV-файла, обычно генерируемого программой Excel с настройкой «разделитель с помощью TAB».

class csv.unix_dialect — диалект CSV-файла, обычно генерируемого в UNIX-системах (‘\n’ для новой строки, закавычивание всех полей).

Определение диалекта

class csv.Sniffer — используется для угадывания диалекта CSV-файла. Имеет следующие методы:

csvsniffer.sniff(sample, delimiters=None) — анализирует пример и возвращает Dialect, соответствующий обнаруженным параметрам. Если задан параметр delimiters , он интерпретируется как все возможные разделители.

csvsniffer.has_header(sample) — анализирует текст и возвращает True, если первая строка похожа на строку заголовков.

Методы определения диалекта являются эвристическими; это означает, что Sniffer может ошибаться.

Пример использования Sniffer:

Примеры

Простейший пример чтения CSV файла:

Чтение файла формата passwd:
Простейший пример записи CSV файла:

Для вставки кода на Python в комментарий заключайте его в теги

  • Модуль csv - чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ
  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов
  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

Список в csv табличку [закрыт]

Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.

Закрыт 8 лет назад .

Доброго всем вечера! Помогите вывести список ['5', '18', '0', '0', '0', '0', '2', '0', '0', '0', '0', '0', '0'] в одну колонку csv таблицы с помошью python 3.4. Заранее спасибо!

Отслеживать
355 1 1 серебряный знак 8 8 бронзовых знаков
задан 4 авг 2015 в 19:14
11 1 1 серебряный знак 1 1 бронзовый знак
Хорошо бы увидеть, какое решение, хоть частичное, у вас уже есть на данный момент.
4 авг 2015 в 21:25

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Довольно странное требование — записать данные в одну колонку в csv-файл. Ведь CSV — это такой формат представления таблицы в виде текстового файла, в котором каждая строка делится на поля определённым разделителем (например запятой). Например, поимённый список меток stackoverflow с количеством заданных вопросов мог бы начинаться вот так:

php;12557;18;78 javascript;8419;13;84 java;6435;9;59 

Таким образом, если колонка в csv-файле всего одна, то задача никак бы не отличалась от "вывести элементы списка в файл, каждый на новую строчку". Разделять-то нечего.

Впрочем, автору виднее 🙂 Вывести список в одну колонку csv можно вот так:

import csv data = ['5', '18', '0', '0', '0', '0', '2', '0', '0', '0', '0', '0', '0'] with open('list_to_csv.csv', 'w', newline='') as csv_file: csv_writer = csv.writer(csv_file) for item in data: csv_writer.writerow([item]) 

Как записать список в csv файл python

Одним из распространенных файловых форматов, которые хранят в удобном виде информацию, является формат csv . Каждая строка в файле csv представляет отдельную запись или строку, которая состоит из отдельных столбцов, разделенных запятыми. Собственно поэтому формат и называется Comma Separated Values. Но хотя формат csv - это формат текстовых файлов, Python для упрощения работы с ним предоставляет специальный встроенный модуль csv .

Рассмотрим работу модуля на примере:

import csv FILENAME = "users.csv" users = [ ["Tom", 28], ["Alice", 23], ["Bob", 34] ] with open(FILENAME, "w", newline="") as file: writer = csv.writer(file) writer.writerows(users) with open(FILENAME, "a", newline="") as file: user = ["Sam", 31] writer = csv.writer(file) writer.writerow(user)

В файл записывается двухмерный список - фактически таблица, где каждая строка представляет одного пользователя. А каждый пользователь содержит два поля - имя и возраст. То есть фактически таблица из трех строк и двух столбцов.

При открытии файла на запись в качестве третьего параметра указывается значение newline="" - пустая строка позволяет корректно считывать строки из файла вне зависимости от операционной системы.

Для записи нам надо получить объект writer , который возвращается функцией csv.writer(file) . В эту функцию передается открытый файл. А собственно запись производится с помощью метода writer.writerows(users) Этот метод принимает набор строк. В нашем случае это двухмерный список.

Если необходимо добавить одну запись, которая представляет собой одномерный список, например, ["Sam", 31] , то в этом случае можно вызвать метод writer.writerow(user)

В итоге после выполнения скрипта в той же папке окажется файл users.csv, который будет иметь следующее содержимое:

Tom,28 Alice,23 Bob,34 Sam,31

Для чтения из файла нам наоборот нужно создать объект reader :

import csv FILENAME = "users.csv" with open(FILENAME, "r", newline="") as file: reader = csv.reader(file) for row in reader: print(row[0], " - ", row[1])

При получении объекта reader мы можем в цикле перебрать все его строки:

Tom - 28 Alice - 23 Bob - 34 Sam - 31

Работа со словарями

В примере выше каждая запись или строка представляла собой отдельный список, например, ["Sam", 31] . Но кроме того, модуль csv имеет специальные дополнительные возможности для работы со словарями. В частности, функция csv.DictWriter() возвращает объект writer, который позволяет записывать в файл. А функция csv.DictReader() возвращает объект reader для чтения из файла. Например:

import csv FILENAME = "users2.csv" users = [ , , ] with open(FILENAME, "w", newline="") as file: columns = ["name", "age"] writer = csv.DictWriter(file, fieldnames=columns) writer.writeheader() # запись нескольких строк writer.writerows(users) user = # запись одной строки writer.writerow(user) with open(FILENAME, "r", newline="") as file: reader = csv.DictReader(file) for row in reader: print(row["name"], "-", row["age"])

Запись строк также производится с помощью методов writerow() и writerows() . Но теперь каждая строка представляет собой отдельный словарь, и кроме того, производится запись и заголовков столбцов с помощью метода writeheader() , а в метод csv.DictWriter в качестве второго параметра передается набор столбцов.

При чтении строк, используя названия столбцов, мы можем обратиться к отдельным значениям внутри строки: row["name"] .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *