我试图使用Python的ftplib读取文件而不编写它们.大致相当于:
def get_page(url):
try:
return urllib.urlopen(url).read()
except:
return ""
Run Code Online (Sandbox Code Playgroud)
但使用FTP.
我试过了:
def get_page(path):
try:
ftp = FTP('ftp.site.com', 'anonymous', 'passwd')
return ftp.retrbinary('RETR '+path, open('page').read())
except:
return ''
Run Code Online (Sandbox Code Playgroud)
但这不起作用.文档中的唯一示例涉及使用该ftp.retrbinary('RETR README', open('README', 'wb').write)格式编写文件.是否可以在不先写入的情况下读取ftp文件?
我想检索存储在 FTP 服务器上的压缩 gz 文件中的数据,而不将该文件写入本地存档。
目前我已经完成了
from ftplib import FTP
import gzip
ftp = FTP('ftp.server.com')
ftp.login()
ftp.cwd('/a/folder/')
fileName = 'aFile.gz'
localfile = open(fileName,'wb')
ftp.retrbinary('RETR '+fileName, localfile.write, 1024)
f = gzip.open(localfile,'rb')
data = f.read()
Run Code Online (Sandbox Code Playgroud)
但是,这会将文件“localfile”写入当前存储。
我试图改变这一点
from ftplib import FTP
import zlib
ftp = FTP('ftp.server.com')
ftp.login()
ftp.cwd('/a/folder/')
fileName = 'aFile.gz'
data = ftp.retrbinary('RETR '+fileName, zlib.decompress, 1024)
Run Code Online (Sandbox Code Playgroud)
但是,ftp.retrbinary不输出其回调的输出。有没有办法做到这一点?
我想从FTP服务器下载或读取文件的一部分而不是下载整个文件,这是为了查看FTP服务器中存在的数据是否正确。
我们有这么多的客户,并在FTP服务器中的每个文件可以是任何大小的,所以不是下载的或阅读完整的文件,我只是想下载或阅读文件的一部分,让我们说,我想只有文件的5KB或如果按文件中的第 100 行。
我有一个像下面这样的 PHP 函数,它完成了一半的工作,但对于较大的文件,它失败了。
function readByBytes($path)
{
try
{
$handle = fopen($path, "rb");
if ($handle)
{
while (($buffer = fgets($handle, 4096)) !== false)
{
}
if (!feof($handle))
{
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
}
catch (Exception $e)
{
echo $e;
}
}
$filename = "ftp://username:password@127.0.0.1/prod/clientfeed.csv";
$iterator = readByBytes($filename);
foreach ($iterator as $key => $iteration)
{
/// if file read is 5kb or some 100 lines
break;
}
Run Code Online (Sandbox Code Playgroud)
有人可以在 PHP 或 …