相关疑难解决方法(0)

是否可以在不使用Python编写FTP文件的情况下读取它们?

我试图使用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文件?

python ftp ftplib

28
推荐指数
1
解决办法
2万
查看次数

从 FTP 服务器上的 gz 文件中检索数据,而无需在本地写入

我想检索存储在 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不输出其回调的输出。有没有办法做到这一点?

python ftp gzip ftplib

2
推荐指数
1
解决办法
1498
查看次数

使用 PHP 或 Python 从 FTP 服务器读取或下载 5kb 的文件,而不是下载或读取整个文件

我想从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 或 …

php python ftp

2
推荐指数
1
解决办法
326
查看次数

标签 统计

ftp ×3

python ×3

ftplib ×2

gzip ×1

php ×1