我看过Why is Python giving me "an integer is required" when it shouldn't be?。它几乎是我的问题的完整解决方案,但并不完全。
这是我的代码:
#! usr/local/bin/python3.6
# coding: utf-8
from os import getcwd, listdir
import psycopg2
from io import open
conn = psycopg2.connect("dbname=ktab user=malikarumi")
cur = conn.cursor()
path = getcwd()
filenames = listdir(path)
for filename in filenames:
with open(filename, 'r', 'utf-16') as f:
f1 = f.read()
cur.execute("INSERT INTO testable (title, content, chron_date, clock)\
VALUES (%s, %s, %s, %s)"),
(filename, f1, '2017-12-30', '23:59:00'),
conn.commit()
cur.close()
conn.close()
在阅读旧的SO帖子后,我修改了上面的代码,以便指定我想要的io
模块,并将os
模块限制为我正在使用的两个模块。 Sublime Text 3有一个工具提示,表明我正在调用io.open()
,但是当我运行代码时,它显然是os.open()
(我知道因为错误):
(lifeandtimes) malikarumi@Tetuoan2:~/Projects/Progress_Logs/2017$
python ktab_odt4.py
Traceback (most recent call last):
File "ktab_odt4.py", line 17, in <module>
with open(filename, 'r', 'utf-16') as f:
TypeError: an integer is required (got type str)
注意:我已尝试with io.open()
和import io
。在这两种情况下,pylint都发出了尖叫声,翻译给了我名字错误。使用'rb'
过去的pylint,但解释器仍然给我TypeError
。这种情况的解决方法是什么?
答案 0 :(得分:1)
io.open()
的第三个位置参数是buffering
,需要一个整数。您正在传递字符串'utf-16'
作为第三个参数,因此您将获得错误。您需要使用encoding='utf-16'
将该值作为关键字参数传递。