Chinaunix

标题: 【求助】怎们用FTPlib上传整个目录,急!!! [打印本页]

作者: jarways    时间: 2008-05-11 14:46
标题: 【求助】怎们用FTPlib上传整个目录,急!!!
在教程中我看到怎么上传一个文件,但现在我想上传整个目录的话该怎么做,是不是要先读出有哪些文件,软后一个一个传?
好像实现起来很复杂呀,有写好的代码吗?
先谢谢了
作者: luffy.deng    时间: 2008-05-11 19:51
一个个传也不麻烦吧?
作者: jarways    时间: 2008-05-12 09:46
可是如果是多层目录呢,太多的文件该怎么办?
有写好的上传目录的lib吗?
作者: limodou    时间: 2008-05-12 15:57
先遍历本地目录,可能使用os.walk或os.path.walk,两者略有差异。然后对每个文件或目录决定是上传还是创建目录。好象还没有简单的自动上传的模块。
作者: luffy.deng    时间: 2008-05-12 21:34
按照limodou 的思路写的,没有测试不知道能不能工作
from ftplib import FTP
import os
ftp=FTP('')
for d in os.walk('g:/test'):
    ftp.mkd(d[0])
    ftp.cwd(d[0])
    for cdir in d[1]:
        ftp.mkd(cdir)
    for f in d[2]:
        ftp.ftp.storbinary(f)
作者: limodou    时间: 2008-05-13 08:35
差不多,可能再加上错误处理就差不多了。比如后台已经有目录存在会不会报错。这个试一试就知道了。
作者: jarways    时间: 2008-05-13 15:09
非常感谢luffy.deng的支持!
很简洁的代码!

好像有一点小问题:粗体的创建目录不需要,前面已经建好了
from ftplib import FTP
import os
ftp=FTP('')
for d in os.walk('g:/test'):
    ftp.mkd(d[0])
    ftp.cwd(d[0])
    for cdir in d[1]:
        ftp.mkd(cdir)

    for f in d[2]:
        ftp.ftp.storbinary(f)


十分感谢!
作者: luffy.deng    时间: 2008-05-13 21:32
子目录还是要建吧?每次子目录中第一个建重复了,加上已有目录创建错误处理就行了
作者: jarways    时间: 2008-05-14 14:59
d[0]好像是一个目录结构,eg:"d[0] == AB_8_5_0\folder", 那mkd(d[0])就会出错,怎么只得到后面的目录名呢?
作者: jarways    时间: 2008-05-14 15:02
请问这个错误处理怎么做才好呢,呵呵,我是个菜鸟,请多多指点!
作者: BJSH    时间: 2008-05-15 11:13
可以继承ftplib 写upload的方法.. 用递归 实现一个对文件和目录通用的
作者: honglang13    时间: 2008-05-15 15:07
呵呵我也才学
好象错误处理可以用:
try
..
except
...




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2