我正在使用Paramiko从SFTP服务器获取文件的程序。最初,我使用get
将文件拉到本地,然后通过打开本地副本来处理文件。但是,我尝试避免使用get
,而是将文件视为流进行读取。这很好用,直到遇到不是UTF-8的字符,比如 <96>。此时程序会抛出异常。问题出现在以下代码行:
for line in remote_file
我无法从流中获取数据。我看到了解码和重新编码的提及,但是由于Paramiko没有给我数据,所以我看不到任何方法能够做到这一点。
是否有Paramiko参数可以指定要执行的操作或提供某种方式来获取原始数据?如何解决这个问题?
下面是正在处理的代码 - 前三行建立连接。然后我有一些代码(未显示)在其中过滤目录并找到我关心的文件列表。倒数第二行打开与SFTP服务器上的文件的连接。最后一行是发生错误的地方 - 我在整个代码块周围有一个try
块。当异常被捕获时返回的错误是:
UnicodeDecodeError:'utf-8'编解码器无法解码位置124中的0x96字节:无效的起始字节
ftpTransport = paramiko.Transport((FTPSERVER, FTPPORT))
ftpTransport.connect(username=FTPUSERNAME, password=FTPPASSWORD)
sftp = paramiko.SFTPClient.from_transport(ftpTransport)
remote_file = sftp.open(remoteName)
for line in remote_file:
如果我使用sftp.get
然后打开本地文件,就不会出现UTF-8错误。目前我已经改变了我的代码来执行这一步骤,但如果不必要的话,我宁愿不复制本地文件。