我想在一个安全的SFTP文件夹中读取一些CSV/Excel文件,在这些文件中做一些更改(在每个文件中固定更改,如删除列2),将它们上传到Postgre DB,并将它们上传到Python中的不同SFTP路径
最好的方法是什么?
我已经使用pysftp库连接到SFTP,并正在阅读Excel:
import pysftp
import pandas as pd
myHostname = "*****"
myUsername = "****"
myPassword = "***8"
cnopts =pysftp.CnOpts()
cnopts.hostkeys = None
sftp=pysftp.Connection(host=myHostname, username=myUsername,
password=myPassword,cnopts=cnopts)
print ("Connection succesfully stablished ... ")
sftp.chdir('test/test')
#sftp.pwd
a=[]
for i in sftp.listdir_attr():
with sftp.open(i.filename) as f:
df=pd.read_csv(f)
字符串
我应该如何继续上传到DB并使CSV的更改永久化?
2条答案
按热度按时间fdbelqdn1#
你已经完成了下载部分。
对于上传部分,请参阅How to Transfer Pandas DataFrame to .csv on SFTP using Paramiko Library in Python?-虽然它是用于Paramiko的,pysftp
Connection.open
方法的行为与ParamikoSFTPClient.open
相同,所以代码是相同的(尽管你使用should not use pysftp)。完整的代码可以是:
字符串
上面的内容更新了同一个文件。如果您想上传到其他文件,请使用以下内容:
型
有关
bufsize
的用途,请参阅:Writing to a file on SFTP server opened using Paramiko/pysftp "open" method is slow的
cnopts.hostkeys = None
,除非你不关心安全性。有关正确的解决方案,请参见Verify host key with pysftp *。z0qdvdin2#
这是一个问题中的几个问题:)
我建议采用这种方法:
1.制作文件的本地副本(不确定它有多大,在本地机器和sftp服务器之间来回移动没有意义。你可以用get方法吗
1.使用pandas对数据进行操作,然后使用to_csv方法将其转储回csv
1.使用
pandas.io
或纯SQLAlchemy
将数据加载到postgree。检查文档here1.使用put方法将文件上传到所需的目标