Paramiko utf-8 解决方法
Paramiko utf-8 workaround
我正在尝试解决 paramiko 严格的 utf-8 解码功能。我想以二进制模式打开文件并逐行读入数据帧。我该怎么做?
remote_file = sftp.open(remoteName, "rb")
for line in remote_file:
print(line.decode("utf8", "ignore"))
我在我的服务器上进行了测试,我看到了
这个代码
remote_file = sftp.open(remoteName)
print(remote_file.read())
读取数据为 bytes
- 即使我没有设置 bytes-mode
(rb
)
这个代码
remote_file = sftp.open(remoteName)
print(remote_file.readlines())
通常读取数据为 string
但当我设置 bytes-mode
(rb
).
时可以读取为 bytes
似乎当我使用 read_csv(remote_file)
然后它使用一些内部包装器并自动转换为 utf-8
- 即使我设置 bytes-mode
(rb
) - 和read_csv
中的设置 encoding
无法更改。
但是我可以用read()
和io.StringIO
用ie手动转换。 latin1
import io
remote_file = sftp.open(remoteName)
bytes = remote_file.read()
text = bytes.decode('latin1')
#text = remote_file.read().decode('latin1')
file_obj = io.StringIO(text)
df = pd.read_csv(file_obj)
#df = pd.read_csv(io.StringIO(text))
编辑:
基于 中的答案,它适用于 read_csv
中的 io.BytesIO
和 encoding
。
import io
remote_file = sftp.open(remoteName)
bytes = remote_file.read()
file_obj = io.BytesIO(bytes)
df = pd.read_csv(file_obj, encoding='latin1')
#df = pd.read_csv(io.BytesIO(bytes), encoding='latin1')
我正在尝试解决 paramiko 严格的 utf-8 解码功能。我想以二进制模式打开文件并逐行读入数据帧。我该怎么做?
remote_file = sftp.open(remoteName, "rb")
for line in remote_file:
print(line.decode("utf8", "ignore"))
我在我的服务器上进行了测试,我看到了
这个代码
remote_file = sftp.open(remoteName)
print(remote_file.read())
读取数据为 bytes
- 即使我没有设置 bytes-mode
(rb
)
这个代码
remote_file = sftp.open(remoteName)
print(remote_file.readlines())
通常读取数据为 string
但当我设置 bytes-mode
(rb
).
bytes
似乎当我使用 read_csv(remote_file)
然后它使用一些内部包装器并自动转换为 utf-8
- 即使我设置 bytes-mode
(rb
) - 和read_csv
中的设置 encoding
无法更改。
但是我可以用read()
和io.StringIO
用ie手动转换。 latin1
import io
remote_file = sftp.open(remoteName)
bytes = remote_file.read()
text = bytes.decode('latin1')
#text = remote_file.read().decode('latin1')
file_obj = io.StringIO(text)
df = pd.read_csv(file_obj)
#df = pd.read_csv(io.StringIO(text))
编辑:
基于 read_csv
中的 io.BytesIO
和 encoding
。
import io
remote_file = sftp.open(remoteName)
bytes = remote_file.read()
file_obj = io.BytesIO(bytes)
df = pd.read_csv(file_obj, encoding='latin1')
#df = pd.read_csv(io.BytesIO(bytes), encoding='latin1')