2014-02-20 2 views
0

Я бегу на вопрос, пытаясь открыть текстовый файл для чтения в Python 3. Код выглядит следующим образом:Тип Ошибка открытия питон файл для чтения

def main(): 
the_file = input('What is the name of the file?') 

open_file = open(the_file,"r","utf8") 
open_file.read() 

, а затем я звоню функцию ,

и ошибка, я получаю:

Traceback (most recent call last): 
    File "/Users/Matthew/Desktop/CaesarCipher.py", line 9, in <module> 
    main() 
    File "/Users/Matthew/Desktop/CaesarCipher.py", line 7, in main 
    open_file = open(encrypted_file,"r","utf8") 
TypeError: an integer is required 

Неясно мне, где я использую неправильный тип ... я могу получить некоторое представление о том, почему это не работает?

Заранее спасибо.

ответ

1

Это решило проблему:

open_file = open(the_file,"r") 

третий параметр представляет собой buffer parameter, а не кодирование?

Так что вы можете сделать, это:

open_file = open(the_file,"r", 1, 'utf-8') # 1 == line Buffered reading 

Также ..
Вы должны сделать это вместо того, чтобы:

with open(the_file, 'rb') as fh: 
    data = fh.read().decode('utf-8') 

или

with open(the_file, 'r', -1, 'utf-8') as fh: 
    data = fh.read() 

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

+0

'открытой()' функция в Python 2 и Python 3 имеют разные параметры например, 'open()' funciton в Python 2 не имеет параметра 'encoding'. Не связывайтесь с документами Python 2 для Python 3. – jfs

+0

'buffering = 1' означает * line * buffering (это не просто означает, что буферизация включена, например, по умолчанию' buffering = -1' означает, что размер буфера равен 'io.DEFAULT_BUFFER_SIZE'). – jfs

+0

Файл, открытый в текстовом режиме '' r'', выводит строки Unicode. Неверно называть '.decode ('utf-8')' на них ('str' объект не имеет атрибута 'decode' в Python 3) – jfs

2

3-й аргумент open() является buffering:

open(file, mode='r', buffering=-1, encoding=None, 
    errors=None, newline=None, closefd=True, opener=None) -> file object 

Pass кодировку в качестве ключевого слова параметра вместо:

with open(the_file, encoding="utf-8") as file: 
    text = file.read() 
Смежные вопросы