python - 使用 pysftp 拆分 SFTP 目录中的文本文件
问题描述
我正在尝试使用 python pysftp 将大小为 100 MB(具有唯一行)的文本文件拆分为 10 个大小相同的文件,但我无法找到合适的方法。
请让我知道如何从 SFTP 目录读取/拆分文件并将所有文件放回 FTP 目录本身。
with pysftp.Connection(host=sftphostname, username=sftpusername, port=sftpport, private_key=sftpkeypath) as sftp:
with sftp.open(source_filedir+source_filename) as file:
for line in file:
<....................Unable to decide logic------------------>
解决方案
您可能需要的逻辑如下:
由于您处于只读环境中,因此您需要将整个文件下载到内存中。
使用 Python
io.StringIO()
处理内存中的数据,就好像它是一个文件一样。当您谈论行时,我假设您的意思是文件是 CSV 格式?您可以使用 Python 的
csv
库来解析文件。首先使用 快速扫描文件
csv.reader()
,使用它来计算文件中的行数。然后,这可用于确定如何将文件拆分为相等数量的行,而不是仅以设置的字节数拆分文件。知道行数后,重新打开数据(再次作为文件)并读取标题行。然后可以将其添加到您创建的每个拆分文件的第一行。
现在读取
n
行(基于您的总行数)。使用 acsv.writer()
和 anotherio.StringIO()
先写入标题行,然后将拆分的行写入内存。然后可以将其用于上传pysftp
到服务器上的新文件,而无需访问实际的文件系统。
结果将是每个文件也将有一个有效的标题行。
推荐阅读
- javascript - 如何构建多边形绘图工具作为功能性反应组件?
- linux - 使用 Bash 和 GNU 工具将 GMT 时间戳转换为本地时间
- r - 您可以通过在函数调用中显式引用包来管理 R 包冲突吗?
- python - Raspberry Pi 中高效慢动作视频播放的想法
- java - 线程在java中的服务器客户端中存在多长时间?
- w3.css - 使用带有主题驱动边框颜色的 w3.css 主题
- ruby - 在 Ruby 中解析 CAA DNS 记录
- c# - Unity/c#async函数中的await freeze sync进程(应该在await之前执行)
- node.js - Mojang API 在 unix 时间戳处获取播放器的 UUID(api 不起作用?)
- c# - 使用 dotnet core \ c# 删除 GCP Spanner Instance