Получить объект файла, используемый объектом чтения / записи CSV

Есть ли способ получить доступ к объекту файла, используемому объектом записи / чтения CSV после его создания? Я открыл модуль csv, и похоже, что это встроенный конкурс. Я также попытался установить объект файла как свойство, но получил следующую ошибку:

AttributeError: '_csv.writer' object has no attribute 'fileobj'
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
1 397
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

csv.writer - это «встроенная» функция. То есть он написан на скомпилированном коде C, а не на Python. Таким образом, его внутренние переменные недоступны из кода Python.

При этом я не уверен, что Почему вам нужно будет проверить объект csv.writer, чтобы узнать объект файла. Этот объект указывается при создании объекта:

w = csv.writer(fileobj, dialect, ...)

Поэтому, если вам понадобится доступ к этому объекту позже, просто сохраните его в другой переменной.

Я не создаю писателя, фабричная функция создает объект csv.writer, поэтому у меня никогда не было ссылки на файловый объект.

Mark Roddy 13.10.2008 22:41

Что это за заводская функция? Это написано на Python? Можете ли вы изучить его код, чтобы понять, как получить файловый объект?

Dan Lenski 13.10.2008 22:54

Есть много веских причин, по которым вы можете захотеть это сделать. Возможно, вы хотите закрыть базовый файл, но вы не находитесь в области действия функции, в которой вы его создали. Конечно, вы можете спрятать ссылку на базовый файл, но насколько он чист? Не так чисто, как если бы объект csv предоставил ссылку на свой файловый объект.

Travis Wilson 15.02.2018 23:29

Я согласен. Было бы лучше, если бы объекты чтения / записи CSV действительно предоставляли ссылки на объекты, подобные file, которые они используют… но текущая стандартная библиотека этого не делает.

Dan Lenski 16.02.2018 09:13

Насколько я могу судить, нет простого способа вернуть объект файла после того, как вы поместите его в объект csv. Мой подход, вероятно, состоял бы в том, чтобы создать подклассы для записи и чтения csv, которые вы используете, чтобы они могли переносить эти данные с собой. Конечно, это предполагает возможность прямого доступа к типам классов, которые создает фабричная функция (среди прочего).

Другие вопросы по теме