Python 是否可以使用Paramiko指定文件的编码?

Python 是否可以使用Paramiko指定文件的编码?,python,csv,sftp,paramiko,pysftp,Python,Csv,Sftp,Paramiko,Pysftp,我正在尝试使用pysftp/Paramiko通过SFTP读取CSV。我的代码如下所示: input_conn = pysftp.Connection(hostname, username, password) file = input_conn.open("Data.csv") file_contents = list(csv.reader(file)) 但当我这样做时,我会得到以下错误: UnicodeDecodeError:“utf-8”编解码器无法解码位置23中的字节

我正在尝试使用pysftp/Paramiko通过SFTP读取CSV。我的代码如下所示:

input_conn = pysftp.Connection(hostname, username, password)
file = input_conn.open("Data.csv")
file_contents = list(csv.reader(file))
但当我这样做时,我会得到以下错误:

UnicodeDecodeError:“utf-8”编解码器无法解码位置23中的字节0x96:无效的开始字节

我知道这意味着文件应该是UTF-8编码的,但不是。奇怪的是,如果我下载该文件,然后使用我的代码打开该文件,我可以将编码指定为“macroman”,并且没有错误:

with open("Data.csv", "r", encoding="macroman") as csvfile:
    file_contents = list(csv.reader(csvfile))

Paramiko文档说,文件编码在SFTP上没有意义,因为它将所有文件都视为字节——但是,如果我使用Paramiko打开文件,我如何让Python的CSV模块识别编码呢?

如果文件不大,那么将其加载到内存中两次并不是问题,您可以下载并转换内存中的内容:

with io.BytesIO() as bio:
    input_conn.getfo("Data.csv", bio)
    bio.seek(0)

    with io.TextIOWrapper(bio, encoding='macroman') as f:
        file_contents = list(csv.reader(f))


部分基于。

这是可行的!谢谢