python - 从 FTP 检索文件时如何指定本地目标文件夹

标签 python python-2.7 ftp

当前代码会将远程 XML 文件下载到该程序所在的目录。 如何指定另一个本地目录作为目的地?

如果这里有什么奇怪的代码也请指出。 :)

import ftplib
import os
import os
import socket

HOST = 'ftp.server.com'
DIRN = 'DirectoryInFTPServer'
filematch = '*.xml'
username = 'username'
password = 'password'

def main():
    try:
        f = ftplib.FTP(HOST)
    except (socket.error, socket.gaierror), e:
        print 'ERROR: cannot reach "%s"' % HOST
        return
    print '*** Connected to host "%s"' % HOST

    try:
        f.login(username, password)
    except ftplib.error_perm, e:
        print 'ERROR: cannot login'
        f.quit
        return
    print '*** Logged in successfully'

    try:
        f.cwd(DIRN)
    except ftplib.error_perm, e:
        print 'ERROR: cannot CD to "%s"' % DIRN
        f.quit()
    print '*** Changed to folder: "%s"' % DIRN

    try:
        s = 0;
        for filename in f.nlst(filematch):
            fhandle = open(filename, 'wb')
            print 'Getting ' + filename
            f.retrbinary('RETR ' + filename, fhandle.write)
            s = s + 1
    except ftplib.error_perm, e:
        print 'ERROR: cannot read file "%s"' % filename
        os.unlink(filename)

    f.quit()
    print 'Files downloaded: ' + str(s)
    return

if __name__ == '__main__':
    main()

最佳答案

使用os.chdir()更改本地工作目录,然后在获取文件后将其更改回来。

我用####标记了添加的行

import ftplib
import os
import os
import socket

HOST = 'ftp.server.com'
DIRN = 'DirectoryInFTPServer'
filematch = '*.xml'
username = 'username'
password = 'password'
storetodir='DirectoryToStoreFilesIn' ####
def main():
    try:
        f = ftplib.FTP(HOST)
    except (socket.error, socket.gaierror), e:
        print 'ERROR: cannot reach "%s"' % HOST
        return
    print '*** Connected to host "%s"' % HOST

    try:
        f.login(username, password)
    except ftplib.error_perm, e:
        print 'ERROR: cannot login'
        f.quit
        return
    print '*** Logged in successfully'

    try:
        f.cwd(DIRN)
    except ftplib.error_perm, e:
        print 'ERROR: cannot CD to "%s"' % DIRN
        f.quit()
    print '*** Changed to folder: "%s"' % DIRN

    currdir=os.getcwd() ####

    try:
        os.chdir(storetodir)####
        s = 0;

        for filename in f.nlst(filematch):
            fhandle = open(filename, 'wb')
            print 'Getting ' + filename
            f.retrbinary('RETR ' + filename, fhandle.write)
            s = s + 1
    except ftplib.error_perm, e:
        print 'ERROR: cannot read file "%s"' % filename
        os.unlink(filename)
    os.chdir(currdir) ####
    f.quit()
    print 'Files downloaded: ' + str(s)
    return

if __name__ == '__main__':
    main()

关于python - 从 FTP 检索文件时如何指定本地目标文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15873427/

相关文章:

python - Tkinter 框架将自身添加到主窗口

python - Pytest - 如何使用一个固定装置处理多个conftest文件问题

PowerShell 原始 FTP

python - 无法使用带有 Selenium 的 Python 单击按钮

python - 语音到文本 - 将说话者标签映射到 JSON 响应中的相应转录本

python - 在 Python 中提取特定列并将其从字典中分组

python - 代码未附加正确的对象...为什么?

apache - 如何在 ftp 任务的构建文件中指定类路径

python - 当我尝试列出 FTP 服务器时得到 "ConnectionRefusedError"

python - 使每个进程都可以访问全局变量