Python 调用io.open(),而不是os.open()

Python 调用io.open(),而不是os.open(),python,Python,我读过。对于我的问题,这几乎是一个完整的解决方案,但并不完全 这是我的密码: #! 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() filename

我读过。对于我的问题,这几乎是一个完整的解决方案,但并不完全

这是我的密码:

#! 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
模块限制为我正在使用的两个模块。升华文本3有一个工具提示,指示我正在调用
io.open()
,但当我运行代码时,它显然是
os.open()
(我知道是因为错误):

(生命周期和时间)malikarumi@Tetuoan2:~/Projects/Progress\u Logs/2017$
python ktab_odt4.py
回溯(最近一次呼叫最后一次):
文件“ktab_odt4.py”,第17行,在
将open(文件名'r','utf-16')作为f:
TypeError:需要一个整数(获取类型str)

注意:我已经用io.open()和导入io尝试了
。在这两种情况下,pylint都发出嘎嘎声,翻译给了我名字错误。使用
'rb'
通过了pylint,但解释器仍然给我
类型错误。这种情况的解决方法是什么?

io.open()
的第三个位置参数是
缓冲
,它需要一个整数。您将字符串
'utf-16'
作为第三个参数传递,因此您将得到错误。您需要使用
encoding='utf-16'
将该值作为关键字参数传递。

请将问题中的代码减少到重现问题所需的最小值。@martineau:真的吗?这是现在的要求吗?我这样问是因为我经常因为没有在我的帖子中添加足够的代码而被责难!是的,您几乎应该总是包含代码,但是尽量提供最少的代码来重现问题。这将允许其他人重现问题并测试他们的任何修复,这将使您更有可能快速获得帮助。看见在这种情况下,所有与psycopg2/数据库相关的东西都会妨碍你。看起来你是对的。我试过了,这个错误消失了。非常感谢。不幸的是,现在我有了“UnicodeDecodeError:'utf-16-le'编解码器无法解码260-261位置的字节:非法编码”,这似乎在文档本身中,如果我无法找到解决方法,我将不得不单独发布另一个问题:-(