我对Python有点陌生,我只是将我对JS(节点)所做的一些操作转换为Python(烧瓶网络服务器)-连接到安全的FTP服务并从那里读取和解析CSV文件,因为我知道使用Python更快。我几乎可以做所有事情,但是我在解析CSV文件方面有些困难。所以这是我的代码-
import urllib.request
import csv
import json
import pysftp
import pandas as pd
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
name = 'username'
password = 'pass'
host = 'hostURL'
path = ""
with pysftp.Connection(host=host, username=name, password=password, cnopts=cnopts) as sftp:
for filename in sftp.listdir():
if filename.endswith('.csv'):
file = sftp.open(filename)
csvFile = file.read()
我到达可以看到CSV文件内容的部分,但无法很好地解析(就像我需要将其格式化-对象数组)我试图用
解析它 with open (csvFile, 'rb') as csv_file:
print(csv_file)
cr = csv.reader(csv_file,delimiter=",") # , is default
rows = list(cr)
以及与此一起
Past=pd.read_csv(csvFile,encoding='cp1252')
print(Past)
但是我遇到了类似的错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 748: invalid start byte
和
OSError: Expected file path name or file-like object, got <class 'bytes'> type
而且我现在真的很困。(另一个问题-不重要,但只是想知道我是否可以根据最新日期从ftp检索文件-因为有时存储库中可以有多个文件)
熊猫的read_csv
接受文件路径作为参数,而不是文件对象(docs)。实际上,这就是第二个选项中的错误消息:
OSError: Expected **file path name** or file-like object, got **<class 'bytes'>** type
鉴于此,如果使用pandas选项,请尝试将代码替换为:
df=pd.read_csv(filename, encoding='cp1252') # assuming this is the correct encoding
print(df.head() # prints top 5 entries