Python 3.6 ищет неправильный модуль / библиотеку (_io.TextIOWrapper) для функции, которая должна вызываться из pathlib - PullRequest
0 голосов
/ 29 апреля 2020

Я получаю следующую ошибку из следующего кода:

AttributeError: у объекта '_io.TextIOWrapper' нет атрибута 'write_text'

Код:

import pathlib
output_filepath = pathlib.Path(r'/home/john/somedir/data/somefilename.csv')
with output_filepath.open(mode='w') as output_file:
    for line in result_list:
        # Write records to the file
        output_file.write_text('%s\n' % line[1])

"result_list" происходит от result_list = cursor.fetchall ()

Странно то, что этот код вырезан и вставлен из программы, которая не выдает эту ошибку. Ничто не касается объекта «output_filepath» в промежутке между его созданием и использованием в блоке «with».

Я искал в Google ошибку и получаю ноль обращений (что было очень удивительно меня). Я также просмотрел различные совпадения здесь (stackoverflow), которые появляются, когда вы вводите свою «тему» ​​для нового вопроса.

У меня изначально была строка «из pathlib import Path» в качестве строки импорта, но я изменил ее ( вместе со строкой "output_filepath = ...") к тому, что вы видите здесь, в моем стремлении найти проблему.

Я уверен, что где-то что-то делаю не так, но я не вижу что это такое, и я не понимаю, почему код будет работать в другой программе, но не в этой.

1 Ответ

0 голосов
/ 29 апреля 2020

Два объекта output_filepath и output_file в ваших кодах имеют разные классы / типы, и из-за этого у них разные методы, которые вы можете использовать.

Вы пытались использовать write_text, что метод объекта pathlib.Path. Однако, когда вы звоните output_filepath.open(mode='w'), вы получаете взамен открытый файловый объект . Вы можете видеть это - Python говорит, что его тип _io.TextIOWrapper в сообщении об ошибке. Следовательно, output_file.write_text не работает.

Этот открытый объект файла не имеет метода write_text, но имеет метод write, который есть у большинства файлов или файловоподобных объектов в Python.

Так что это работает:

import pathlib
output_filepath = pathlib.Path(r'/home/john/somedir/data/somefilename.csv')
with output_filepath.open(mode='w') as output_file:
    for line in result_list:
        # Write records to the file
        output_file.write('%s\n' % line[1])
...