1,"A towel,",1.0 42," it says, ",2.0 1337,is about the most ,-1 0,massively useful thing ,123 -2,an interstellar hitchhiker can have.,3
Как мне записать следующее data в CSV-файл?
data = [ (1, "A towel,", 1.0), (42, " it says, ", 2.0), (1337, "is about the most ", -1), (0, "massively useful thing ", 123), (-2, "an interstellar hitchhiker can have.", 3), ]
Переведено автоматически
Ответ 1
Вот несколько минимально завершенных примеров того, как читать CSV-файлы и как писать CSV-файлы с помощью Python.
Чистый Python:
import csv
# Define data data = [ (1, "A towel,", 1.0), (42, " it says, ", 2.0), (1337, "is about the most ", -1), (0, "massively useful thing ", 123), (-2, "an interstellar hitchhiker can have.", 3), ]
# Read CSV file withopen("test.csv") as fp: reader = csv.reader(fp, delimiter=",", quotechar='"') # next(reader, None) # skip the headers data_read = [row for row in reader]
print(data_read)
После этого содержимое data_read будет
[['1', 'A towel,', '1.0'], ['42', ' it says, ', '2.0'], ['1337', 'is about the most ', '-1'], ['0', 'massively useful thing ', '123'], ['-2', 'an interstellar hitchhiker can have.', '3']]
Пожалуйста, обратите внимание, что CSV считывает только строки. Вам нужно преобразовать в типы столбцов вручную.
Версия Python 2 + 3 была здесь раньше (ссылка), но поддержка Python 2 прекращена. Удаление материала Python 2 значительно упростило этот ответ.
Взгляните на мой пакет утилит, mpu он очень простой и легко запоминающийся:
import mpu.io data = mpu.io.read('example.csv', delimiter=',', quotechar='"', skiprows=None) mpu.io.write('example.csv', data)
Pandas
import pandas as pd
# Read the CSV into a pandas data frame (df) # With a df you can do many things # most important: visualize data with Seaborn df = pd.read_csv('myfile.csv', sep=',') print(df)
# Or export it in many ways, e.g. a list of tuples tuples = [tuple(x) for x in df.values]
# or export it as a list of dicts dicts = df.to_dict().values()
Смотрите read_csv Документы для получения дополнительной информации. Пожалуйста, обратите внимание, что pandas автоматически определяет, есть ли строка заголовка, но вы также можете установить ее вручную.
Если вы не слышали о Seaborn, я рекомендую ознакомиться с ним.
Другое
Чтение CSV-файлов поддерживается множеством других библиотек, например:
Если вы ищете способ создания файлов конфигурации, возможно, вам захочется прочитать мою короткую статью Файлы конфигурации в Python
Ответ 2
Если вы работаете с CSV-данными и хотите решение с меньшим объемом данных, чем pandas, вы можете попробовать мой пакет, littletable. Может быть установлен в формате pip или просто добавлен в виде отдельного файла .py с вашим собственным кодом, поэтому он очень переносим и подходит для бессерверных приложений.
Чтение CSV-данных так же просто, как вызов csv_import:
data = """\ 1,"A towel,",1.0 42," it says, ",2.0 1337,is about the most ,-1 0,massively useful thing ,123 -2,an interstellar hitchhiker can have.,3"""
import littletable as lt tbl = lt.Table().csv_import(data, fieldnames="number1,words,number2".split(',')) tbl.present()
С принтами:
Number1 Words Number2 ────────────────────────────────────────────────────────── 1 A towel, 1.0 42 it says, 2.0 1337is about the most -1 0 massively useful thing 123 -2 an interstellar hitchhiker can have. 3
(littletable использует модуль rich для представления таблиц.)
littletable не пытается автоматически преобразовать числовые данные, поэтому для числовых столбцов необходима функция преобразования чисел.
Number1 Words Number2 ────────────────────────────────────────────────────────── 1 A towel, 1.0 42 it says, 2.0 1337is about the most -1 0 massively useful thing 123 -2 an interstellar hitchhiker can have. 3
Числовые столбцы выровнены по правому краю, а не по левому.
littletable также имеет другие функциональные возможности ORM, такие как индексирование, объединение, поворот и полнотекстовый поиск. Вот таблица статистики по числовым столбцам.:
tbl.stats("number1 number2".split()).present()
Name Mean Min Max Variance Std_Dev Count Missing ──────────────────────────────────────────────────────────────────────────────── number1 275.6 -21337352390.3593.624713097424950 number2 25.6 -11232966.854.46833942759775550
Наконец, вот текстовый поиск по словам для любой записи со словом "автостопщик":
tbl.create_search_index("words") for match in tbl.search.words("hitchhiker"): print(match)
С принтами:
namespace(number1=-2, words='an interstellar hitchhiker can have.', number2=3)
Ответ 3
При необходимости - прочитайте csv-файл без использования модуля csv:
rows = [] withopen('test.csv') as f: for line in f: # strip whitespace line = line.strip() # separate the columns line = line.split(',') # save the line for use later rows.append(line)