Что такое "_csv" в Python?

При попытке прочитать исходный код для файла csv.py (в качестве руководства по реализации моего собственного класса writer в другом контексте) я обнаружил, что большая часть функций в этом файле, в свою очередь, импортируется из чего-то называется _csv:

 from _csv import Error, __version__, writer, reader, register_dialect, \
                  unregister_dialect, get_dialect, list_dialects, \
                  field_size_limit, \
                  QUOTE_MINIMAL, QUOTE_ALL, QUOTE_NONNUMERIC, QUOTE_NONE, \
                  __doc__

Я не могу найти файл с этим именем в моей системе (включая поиск файлов с помощью набора атрибутов Hidden), хотя я могу сделать import _csv из оболочки Python.

Что это за модуль и можно ли его прочитать?

Ответы

Ответ 1

_csv является C "основой" модуля csv. Его источник находится в Modules/_csv.c. Вы можете найти скомпилированную версию этого модуля из командной строки Python с помощью:

>>> import _csv
>>> _csv
<module '_csv' from '/usr/lib/python2.6/lib-dynload/_csv.so'>

В исходном коде Python нет скрытых файлов:)

Ответ 2

Не соглашайтесь с ответом ларшманов.

Существует официальное объяснение соглашения об именах модулей в PEP8:

Когда модуль расширения, написанный на C или С++, имеет сопутствующий модуль Python, который обеспечивает более высокий уровень (например, более объектно-ориентированный) интерфейс, модуль C/С++ имеет лидирующий символ подчеркивания (например, _socket)

Ответ 3

Ответ уже принят, но я хотел добавить несколько деталей, поскольку у меня был тот же вопрос, что и OP.

Содержимое файла .csv - это только документ с разделителями-запятыми со значениями:

first,last
john,doe
...

Вы можете проверить это, открыв файл .csv в блокноте

Если вы хотите создать CSV файл, вы можете записать его, и вы получите файл csv, который вы хотите.

with open('test.csv', 'w') as file:
    file.write('first,last\n')
    file.write('John,Doe\n')

Простое решение, если вы хотите записать в CSV файл без использования "import csv".