在ftp上自动编辑文件

2024-10-02 06:39:20 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,这里是一个场景:一天一次,一个csv文件被传送到我的ftp服务器。我需要将此信息导入我的CRM系统(Salesforce)。我计划用skyvia.com网站,以及他们的调度服务。挑战在于csv在列上没有标题,而skyvia不能处理这个问题。你知道吗

所以问题是:

  1. 是否可以在ftp服务器上的csv文件中自动插入标题行?我很可能会雇用一个自由职业者来做这件事,但我需要知道我要求什么。pythonweb脚本/应用程序能够处理这个问题吗?

  2. 除了skyvia之外,还有其他方法可以处理不带列标题的导入csv吗?

  3. 有没有其他解决方案可以在不编辑csv或使用Skyvia的情况下为Salesforce处理此导入操作?

我有足够的技术来处理我自己的一些操作,但我知道我的极限。。。你知道吗


Tags: 文件csv服务器com信息标题网站系统
2条回答

根据文件大小,您可以使用pysftp获取CSV文件,添加一个标题行,然后简单地将其放回原处。我之所以说它取决于大小,是因为paramiko库中存在一些未解决的错误,导致它在大的>;1GB文件上失败。你知道吗

从文档中,您可以执行以下操作:

import pysftp

remote_file = 'some_file_name.csv'

srv = pysftp.Connection(host="your_FTP_server", username="your_username",
    password="your_password")

# Download the file from the remote server
srv.get(remote_file)

# Add the header
with open(local_path, 'rb') as csvfile:
    rows = [r for r in csvfile]
rows = ['domain'] + rows

with open(local_path, 'wb') as csvfile:
    for row in rows:
        csvfile.write(row + '\n')


# To upload the file, simple replace get with put. 
srv.put(local_path)

# Closes the connection
srv.close()

FTP协议不允许在文件开头插入行。你知道吗

你必须下载整个文件,在本地编辑,然后重新上传回来。你知道吗

像这样:

from io import BytesIO
from ftplib import FTP

ftp = FTP(host, user, passwd)

f = BytesIO()
# Write header
f.write(str.encode("header\n"))
path = "/remote/path/file.csv"
# Append original contents
ftp.retrbinary("RETR " + path, f.write)
# Re-upload back
f.seek(0, 0)
ftp.storbinary("STOR " + path, f)

相关问题 更多 >

    热门问题