Python 是否可以使用Paramiko指定文件的编码?
我正在尝试使用pysftp/Paramiko通过SFTP读取CSV。我的代码如下所示: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中的字节
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))
部分基于。这是可行的!谢谢