从Google Cloud Storage向FTP服务器流传输数据

问题描述 投票:0回答:1

我正在尝试使用gcsfsftplib从Cloud Storage逐行读取一个csv文件并写入FTP服务器。我在GCS中有大文件,无法存储在内存中,因此我尝试以此方式进行测试。

from ftplib import FTP
import gcsfs
from urllib import request
import io

ftp = FTP('my-ftp-server')

fs = gcsfs.GCSFileSystem(project='my-project')

with fs.open('myFile.csv') as f:
    ftp.storlines("STOR myFile.csv", f)

但出现错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-56-d461792392dd> in <module>
      1 with fs.open('myfile') as f:
----> 2     ftp.storlines("STOR myFile.csv", f)

~\.conda\envs\py3.7\lib\ftplib.py in storlines(self, cmd, fp, callback)
    530         with self.transfercmd(cmd) as conn:
    531             while 1:
--> 532                 buf = fp.readline(self.maxline + 1)
    533                 if len(buf) > self.maxline:
    534                     raise Error("got more than %d bytes" % self.maxline)

TypeError: readline() takes 1 positional argument but 2 were given

关于如何解决此问题或实现我想要的任何建议?

python ftp google-cloud-storage ftplib
1个回答
0
投票

确实fsspec.AbstractFileSystemfsspec.AbstractFileSystem所基于的,尤其是它的GCSFileSystem,似乎与ftplib不兼容。

您是否需要使用readline method(文本模式)?您无法使用readline(二进制模式)吗?

FTP.storlines

如果没有,您将必须实现一个包装类,该包装类的API与FTP.storbinary兼容:

FTP.storbinary

(未经测试,但是应该可以给您带来灵感)

© www.soinside.com 2019 - 2024. All rights reserved.