python将csv文件解析为对象数组

问题描述 投票:0回答:1

我对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检索文件-因为有时存储库中可以有多个文件)

python python-3.x ftp
1个回答
0
投票

熊猫的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
© www.soinside.com 2019 - 2024. All rights reserved.