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






csv.writer - это «встроенная» функция. То есть он написан на скомпилированном коде C, а не на Python. Таким образом, его внутренние переменные недоступны из кода Python.
При этом я не уверен, что Почему вам нужно будет проверить объект csv.writer, чтобы узнать объект файла. Этот объект указывается при создании объекта:
w = csv.writer(fileobj, dialect, ...)
Поэтому, если вам понадобится доступ к этому объекту позже, просто сохраните его в другой переменной.
Что это за заводская функция? Это написано на Python? Можете ли вы изучить его код, чтобы понять, как получить файловый объект?
Есть много веских причин, по которым вы можете захотеть это сделать. Возможно, вы хотите закрыть базовый файл, но вы не находитесь в области действия функции, в которой вы его создали. Конечно, вы можете спрятать ссылку на базовый файл, но насколько он чист? Не так чисто, как если бы объект csv предоставил ссылку на свой файловый объект.
Я согласен. Было бы лучше, если бы объекты чтения / записи CSV действительно предоставляли ссылки на объекты, подобные file, которые они используют… но текущая стандартная библиотека этого не делает.
Насколько я могу судить, нет простого способа вернуть объект файла после того, как вы поместите его в объект csv. Мой подход, вероятно, состоял бы в том, чтобы создать подклассы для записи и чтения csv, которые вы используете, чтобы они могли переносить эти данные с собой. Конечно, это предполагает возможность прямого доступа к типам классов, которые создает фабричная функция (среди прочего).
Я не создаю писателя, фабричная функция создает объект csv.writer, поэтому у меня никогда не было ссылки на файловый объект.