Python: получение ошибки типа при попытке использовать содержимое файла, который я открыл

#python #typeerror

#python #ошибка типа

Вопрос:

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

 def read_file(input_filename):
    file_list = []
    with open(input_filename, 'r') as open_file:
        for x in range(len(open_file)):
            print(open_file[x]    " ["   str(x)   "]")
            if (x % 2) == 0:
                thisTuple = (open_file[x], open_file[x   1])
                file_list.append(thisTuple)
  

Я хотел бы дать что-то взамен за любую помощь больше, чем благодарность, но это действительно много значило бы, если бы кто-нибудь мог дать мне какие-либо указания на то, что я могу здесь делать неправильно.

Спасибо!

Комментарии:

1. Чего вы пытаетесь достичь?

2. Вы пытаетесь прочитать файл построчно или побайтно?

3. @Carcigenicate ах да, я забыл добавить это .. извините. «Ошибка типа: объект типа’_io.TextIOWrapper’ не имеет функции len ()» — это ошибка типа, которую я получаю.

4. Можете ли вы добавить полную трассировку ошибок в сообщение?

Ответ №1:

Причина, по которой вы получаете ошибку, заключается в этом утверждении:

for x in range(len(open_file)):

open_file не реализует __len__ волшебную функцию Python. Это также не объект с возможностью подписки (например, строка). Это TextIOWrapper . Если вы хотите получить данные в виде строки, вам нужно вызвать open_file.read() :

 data= open_file.read()
for x in range(len(data)):
    print(data[x]    " ["   str(x)   "]")
    if (x % 2) == 0:
        thisTuple = (data[x], data[x   1])
        file_list.append(thisTuple)
  

Комментарии:

1. Большое вам спасибо! Я подумал, что это что-то с «open_file», но я не понял, что использовать вместо этого. Теперь это имеет большой смысл.

Ответ №2:

 # ...
for line in open_file:
    x = line.strip()
    # ...