打开python文件进行读取时出现类型错误

打开python文件进行读取时出现类型错误,python,python-3.x,Python,Python 3.x,我在试图打开一个文本文件以便在Python3中阅读时遇到了一个问题。代码如下: 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/Caesar

我在试图打开一个文本文件以便在Python3中阅读时遇到了一个问题。代码如下:

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
回溯(最近一次呼叫最后一次):
文件“/Users/Matthew/Desktop/CaesarCipher.py”,第9行,在
main()
文件“/Users/Matthew/Desktop/CaesarCipher.py”,主文件第7行
打开文件=打开(加密的文件“r”、“utf8”)
TypeError:需要一个整数
我不清楚我在哪里使用了不正确的类型。。。我能了解一下为什么这不起作用吗

提前感谢。

这解决了问题:

open_file = open(the_file,"r")
第三个参数是编码,而不是编码

所以你可以做的是:

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')

更干净的是,您可以“控制”解码,不会以打开文件句柄或错误编码而告终。

这解决了问题:

open_file = open(the_file,"r")
第三个参数是编码,而不是编码

所以你可以做的是:

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')


更干净的是,您可以“控制”解码,不会以打开文件句柄或错误编码而告终。

open()的第三个参数是
缓冲

open(file, mode='r', buffering=-1, encoding=None,
     errors=None, newline=None, closefd=True, opener=None) -> file object
将字符编码作为关键字参数传递:

with open(the_file, encoding="utf-8") as file:
    text = file.read()

open()
的第三个参数是
buffering

open(file, mode='r', buffering=-1, encoding=None,
     errors=None, newline=None, closefd=True, opener=None) -> file object
将字符编码作为关键字参数传递:

with open(the_file, encoding="utf-8") as file:
    text = file.read()

Python2和Python3中的
open()
函数具有不同的参数,例如Python2中的
open()
函数没有
编码
参数。不要链接到Python3问题的Python2文档。
buffering=1
意味着行缓冲(它不仅仅意味着缓冲被启用,例如,默认的
buffering=-1
意味着缓冲区大小等于
io。默认的\u buffer\u size
)。以文本模式打开的文件
'r'
产生Unicode字符串。对它们调用
.decode('utf-8')
是不正确的(
str
对象在Python 3中没有属性“decode”)@J.F.Sebastian谢谢你的更正,该链接只是代表我的o型链接。。我知道第三个参数在整个版本中都是相同的,当我目不转睛地看着它时,我只取了第一个链接。。我应该更加注意这个版本,我很抱歉:)也是的,
.decode()
死于Python2,所以对我的答案做了一些轻微的修改open()函数具有不同的参数,例如Python2中的
open()
函数没有
encoding
参数。不要链接到Python3问题的Python2文档。
buffering=1
意味着行缓冲(它不仅仅意味着缓冲被启用,例如,默认的
buffering=-1
意味着缓冲区大小等于
io。默认的\u buffer\u size
)。以文本模式打开的文件
'r'
产生Unicode字符串。对它们调用
.decode('utf-8')
是不正确的(
str
对象在Python 3中没有属性“decode”)@J.F.Sebastian谢谢你的更正,该链接只是代表我的o型链接。。我知道第三个参数在整个版本中都是相同的,当我目不转睛地看着它时,我只取了第一个链接。。我应该更加注意这个版本,我很抱歉:)也是的,
.decode()
死于Python2,所以对我的答案做了一些轻微的修改!