python - 从 SFTP 服务器解析 CSV 太慢,如何提高效率?
问题描述
所以我有一个 SFTP 服务器,它托管一个包含多个课程数据的 CSV 文件。数据采用以下格式(4 列):
Activity Name,Activity Code,Completion Status,Full Name
Safety with Lasers, 3XX1, 10-Jul-20, "Person, Name"
Safety with Lasers, 3XX1, NaN, "OtherP, OtherName"
How to use wrench, 7NPA, 10-Aug-19, "OtherName, Person"
etc...
我正在使用 Paramiko 使用以下代码访问文件:
file = sftp.open('Data.csv')
但我遇到的问题是它是 SFTPFile 类型。我该如何解析其中的数据?我需要提取课程的名称,并跟踪有多少人完成了它和没有完成它。我目前正在使用以下代码,但速度非常慢。任何建议,将不胜感激:
Courses = ['']
Total =[0]
Compl =[0]
csvreal = pandas.read_csv(file)
for index, row in csvreal.iterrows():
string =(csvreal.loc[[index]].to_string(index=False, header=False))
if(Courses[i] !=string.split(' ')[0]):
i+=1
Courses.append(string.split(' ')[0])
Total.append(0)
Compl.append(0)
if(len(string.split(' ')[2])>3): #Note that incomplete courses do not have completion date, so it is NaN
Compl[i]+=1
Total[i]+=1
我知道这很糟糕,我是新手,不知道自己在做什么。任何有关在何处阅读相关文档或教程的建议将不胜感激。谢谢!
解决方案
sftp.open在远程服务器上打开文件,因此每次读取都将通过网络进行。与从本地磁盘读取相比,这种网络遍历非常慢。使用sftp.get将文件复制到本地机器会更有效,然后可以读取它而不会产生遍历网络的开销。如果您需要更新文件,您可以更新本地副本,然后使用sftp.put复制回服务器。
代码将是这样的(未经测试,因为我手头没有 ftp 服务器):
# Retrieve a copy and open
myfile = sftp.get('Data.csv', 'local-copy-Data.csv')
csvreal = pandas.read_csv(myfile)
# Update remote
sftp.put('local-copy-Data.csv', 'Data.csv')
推荐阅读
- excel - 打开新文件后无法在工作簿上书写
- flutter - 带有 http 调用的 Internet 敏感 UI
- python - 如何处理多级嵌套字典和列表 Python
- c# - 不实现所有虚方法的多态性
- jenkins - jenkins-cli 是否有一些常规限制?
- css - Bootstrap 导航栏和居中项目
- python - 如何将 numpy 数组的内容提取到列表中?
- regex - RegEx 查找组中的所有匹配项
- android - 使用新的上传密钥将 android app bundle 上传到 google play
- php - 如何使用 PHP 获取 str_replace 的数值