打开python文件进行读取时出现类型错误
我在试图打开一个文本文件以便在Python3中阅读时遇到了一个问题。代码如下:打开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
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()
函数没有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,所以对我的答案做了一些轻微的修改!