San*_*hit 2 python postgresql sftp pandas pysftp
我想读取安全 SFTP 文件夹上的一些 CSV/Excel 文件,在这些文件中进行一些更改(每个文件中的固定更改,如删除第 2 列),将它们上传到 Postgre 数据库,并将它们上传到不同的 SFTP 路径Python
最好的方法是什么?
我已经使用 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)
Run Code Online (Sandbox Code Playgroud)
我应该如何继续上传到数据库并使对 CSV 的这些更改永久生效?
您已经完成了下载部分。
\n对于上传部分,请参阅如何使用 Python 中的 Paramiko 库在 SFTP 上将 Pandas DataFrame 传输到 .csv?\xe2\x80\x93 虽然它适用于 Paramiko,但pysftpConnection.open方法的行为与ParamikoSFTPClient.open相同,因此代码是相同的(不过,您不应该使用 pysftp)。
完整的代码可以是这样的:
\nwith sftp.open("/remote/path/data.csv", "r+", bufsize=32768) as f:\n # Download CSV contents from SFTP to memory\n df = pd.read_csv(f)\n\n # Modify as you need (just an example)\n df.at[0, \'Name\'] = \'changed\'\n\n # Upload the in-memory data back to SFTP\n f.seek(0)\n df.to_csv(f, index=False)\n # Truncate the remote file in case the new version of the contents is smaller\n f.truncate(f.tell())\nRun Code Online (Sandbox Code Playgroud)\n以上更新了同一文件。如果您想上传到不同的文件,请使用以下命令:
\n# Download CSV contents from SFTP to memory\nwith sftp.open("/remote/path/source.csv", "r") as f:\n df = pd.read_csv(f)\n\n# Modify as you need (just an example)\ndf.at[0, \'Name\'] = \'changed\'\n\n# Upload the in-memory data back to SFTP\nwith sftp.open("/remote/path/target.csv", "w", bufsize=32768) as f:\n df.to_csv(f, index=False)\nRun Code Online (Sandbox Code Playgroud)\n对于 的目的bufsize,请参阅:
\n写入使用 Paramiko/pysftp“打开”方法打开的 SFTP 服务器上的文件很慢
强制性警告:不要设置cnopts.hostkeys = None,除非您不关心安全性。有关正确的解决方案,请参阅使用 pysftp 验证主机密钥。
| 归档时间: |
|
| 查看次数: |
8776 次 |
| 最近记录: |