1. 程式人生 > >Python學習 第9天 連接FTP和數據庫

Python學習 第9天 連接FTP和數據庫

pre from onf true code ram commit self. dir

公司項目剛好有個小需求,要遍歷FTP文件夾下的圖片,並寫進數據庫,非常適合練手

從網上找了一段代碼,改造了一下

中文是個大坑

#encoding=utf-8
from ftplib import FTP
import os, sys, string, datetime, time, socket, pymssql
reload(sys)
sys.setdefaultencoding(utf8)

class MYFTP:
    def __init__(self, hostaddr, username, password, remotedir, port=21):
        self.hostaddr 
= hostaddr self.username = username self.password = password self.remotedir = remotedir self.port = port self.ftp = FTP() self.file_list = [] def __del__(self): self.ftp.close() def login(self): ftp = self.ftp timeout = 300 socket.setdefaulttimeout(timeout) ftp.set_pasv(True) ftp.connect(self.hostaddr, self.port) ftp.login(self.username, self.password)
print u成功登錄到 %s % (self.hostaddr) ftp.cwd(self.remotedir) def list_files(self, picId, remotedir=./): self.ftp.cwd(remotedir) print(u正在處理目錄 %s % self.ftp.pwd()) self.file_list = [] self.ftp.dir(self.get_file_list) for item in self.file_list: sql_str.append(
‘‘‘ INSERT INTO CaseArchive ( OrderID, CaseID, DocCaseID, EvidenceName, Amount, Page, TotalPage, FilePath, FileName) VALUES (‘%s‘, ‘‘, ‘‘, ‘%s‘, ‘1‘, ‘1‘, ‘1‘, ‘%s‘, ‘%s‘); ‘‘‘ % (self.file_list.index(item) + 1, item[1].split(.)[0], remotedir.encode("UTF-8"), item[1])) sql_str.append("DELETE FROM CaseArchive WHERE PicID = ‘%s‘;" % picId) def get_file_list(self, line): ret_arr = [] file_arr = self.get_filename(line) if file_arr[1] not in [., ..]: self.file_list.append(file_arr) def get_filename(self, line): pos = line.rfind(:) while(line[pos] != ): pos += 1 while(line[pos] == ): pos += 1 while(line[pos] != ): pos += 1 while(line[pos] == ): pos += 1 file_arr = [line[0], line[pos:]] return file_arr if __name__ == __main__: conn = pymssql.connect(host=‘‘,user=‘‘,password=‘‘,database=‘‘,charset=utf8) cur = conn.cursor() #先獲取FTP配置 cur.execute("SELECT ParamValue FROM ParamConfig WHERE ParamName = ‘FTP地址‘;") hostaddr = cur.fetchone()[0] # ftp地址 cur.execute("SELECT ParamValue FROM ParamConfig WHERE ParamName = ‘FTP用戶名‘;") username = cur.fetchone()[0] # 用戶名 cur.execute("SELECT ParamValue FROM ParamConfig WHERE ParamName = ‘FTP密碼‘;") password = cur.fetchone()[0] # 密碼 cur.execute("SELECT ParamValue FROM ParamConfig WHERE ParamName = ‘FTP端口‘;") port = cur.fetchone()[0] # 端口號 #連接FTP rootdir_remote = ‘‘ # 遠程目錄 f = MYFTP(hostaddr, username, password, rootdir_remote, port) f.login() sql_str = [] cur.execute("SELECT PicID, FilePath FROM CaseArchive WHERE Remark = ‘僅目錄‘ GROUP BY FilePath;") rows = cur.fetchall() for row in rows: f.list_files(row[0], row[1]) #拼好的字符串一次性執行,如果update/delete/insert記得要conn.commit(),否則數據庫事務無法提交 cur.execute (‘‘.join(sql_str)) conn.commit() #關閉數據庫連接 cur.close() conn.close()

還在調試中

Python學習 第9天 連接FTP和數據庫