coding utf-8 import ftplib фукнция получения папок внесения файлов общ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# -*- coding: utf-8 -*-
import ftplib
#фукнция получения папок и внесения файлов в общий список(файл)
class FTPList:
def __init__(self, dbase): #starting initialization
self.dbase = dbase
self.file = None
def scan(self, host, port = 21, login = "anonymous", password = "test@test.com", koren = "/"): #main function
self.host = host
self.koren = koren
self.login = login
self.password = password
try: #test for connection to server
self.ftp = ftplib.FTP()
self.ftp.connect(host, port)
self.ftp.login(login, password)
self.getlist(self.koren)
except ftplib.all_errors, msg:
print "Error %s :%s" % (host,port)
print "Error %s: %s %s" % (msg[0], login, password)
def getfolders(self, koren): #get names of folders
dirs = []
file_list = []
try:
self.ftp.dir(koren,file_list.append) #полуаем список файлов и папок
except: # в случае если доступ к папке запрещен возвращаем пустой массив
return dirs
for line in file_list:
if line.split(" ")[-1] not in (".",".."): #отсеиваем . и ..
temp = line.split(" ") #парсим полученое
temp = filter(lambda x: x != "", temp)
if line.startswith("d"): #если папка, то добавить в dirs
dirs.append((" ".join(temp[8:])))
path = koren + "/" + "".join(temp[8:]) + "/"
date = " ".join(temp[5:8])
wraccess = self.testwr( path )
self.SaveList(path, "", wraccess, date)
#write path ro file and date creation
else:
path = koren + "/"
name = " ".join(temp[8:])
date = " ".join(temp[5:8])
wraccess = self.testwr( path )
self.SaveList(path, name, wraccess, date)
return dirs
#рекурсивная функция вызывающаю getfolders n раз )
def getlist(self, dirs):
folders = self.getfolders(dirs) #получаем список папок
for f in folders: #бродим по списку рекурсивно
if dirs.startswith("//"):
dirs = dirs[1:]
self.getlist(dirs + "/" + f)
def testwr(self, path):
try:
self.ftp.mkd( path + "test" )
self.ftp.rmd( path + "test" )
return 1
except:
return 0
def closeall(self):
self.ftp.quit()
#сохранение в файл
def SaveList(self, path, name, writables, crdt): #save record to db
self.dbase.saveFile(path,name,writable,crdt)