gpt4 book ai didi

python - 如何在python中在FTP上上传完整目录?

转载 作者:行者123 更新时间:2023-12-04 14:36:16 30 4
gpt4 key购买 nike

好的,所以我必须在 FTP 服务器上上传一个目录,其中包含子目录和文件。但我似乎无法正确理解。我想按原样上传目录,以及它们所在的子目录和文件。

ftp = FTP()
ftp.connect('host',port)
ftp.login('user','pass')
filenameCV = "directorypath"

def placeFiles():

for root,dirnames,filenames in os.walk(filenameCV):
for files in filenames:
print(files)
ftp.storbinary('STOR ' + files, open(files,'rb'))
ftp.quit()

placeFiles()

最佳答案

您的代码存在多个问题:首先,filenames数组将只包含实际的文件名,而不是整个路径,所以你需要用 fullpath = os.path.join(root, files) 加入它然后使用 open(fullpath) .其次,你退出循环内的 FTP 连接,移动 ftp.quit()低于 placeFiles() 的水平功能。

要递归上传目录,您必须遍历根目录,同时遍历远程目录,随时随地上传文件。

完整示例代码:

import os.path, os
from ftplib import FTP, error_perm

host = 'localhost'
port = 21

ftp = FTP()
ftp.connect(host,port)
ftp.login('user','pass')
filenameCV = "directorypath"

def placeFiles(ftp, path):
for name in os.listdir(path):
localpath = os.path.join(path, name)
if os.path.isfile(localpath):
print("STOR", name, localpath)
ftp.storbinary('STOR ' + name, open(localpath,'rb'))
elif os.path.isdir(localpath):
print("MKD", name)

try:
ftp.mkd(name)

# ignore "directory already exists"
except error_perm as e:
if not e.args[0].startswith('550'):
raise

print("CWD", name)
ftp.cwd(name)
placeFiles(ftp, localpath)
print("CWD", "..")
ftp.cwd("..")

placeFiles(ftp, filenameCV)

ftp.quit()

关于python - 如何在python中在FTP上上传完整目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32481640/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com