工作中的第一个小需求:扫描一个文件夹,查看是否有文件或者有新的文件,如果有,按照固定短信发送格式生成文件,通过FTP上传到短信平台进行短信发送。
ReadMe:
项目包含两个部分:1.功能函数。2.主程序,通过调用功能函数,结合控制流实现一定频率文件扫描、生成固定格式文件,ftp上传。
功能函数包括:定时扫描;固定格式文件生成;ftp连接;ftp上传;
流程:开启定时扫描功能-->判断是否指定路径下存在文件,存在文件则获取文件名,生成固定格式.txt文件,否则什么都不做,继续定时扫描
每5秒钟扫描,看是否存在目标文件,有则上传,无则不操作,上传之后立即删除目标文件。
目标文件的生成:扫描源文件路径,看是否与临时变量保存的文件名列表一致,一致则不做操作,不一致则生成新目标文件,供ftp上传。
先上函数功能模块:
1 #!/usr/bin/env python 2 #-*-coding:utf-8-*- 3 #Created on 2016-5-21上午9:08:18 4 #author: Administrator 5 6 from ftplib import FTP 7 import os 8 9 def scanf_file(dir): #扫描file_path下是否存在文件,如果有返回文件名,如果无则返回空 10 file_list = os.listdir(dir) 11 return file_list
接着上主程序模块:
1 #!/usr/bin/env python 2 #-*-coding:utf-8-*- 3 #Created on 2016-5-21上午9:12:36 4 #author: Administrator 5 6 from file_fun import * 7 import time 8 import datetime 9 10 PHONE_LIST=('13333333333',) 11 DIR = r'D:\test' 12 DES_PATH = r'/home/python/tmp' 13 #FILE_SRC = r'file_list.txt' 14 FTP_SERVER =r'192.168.1.104' 15 USERNAME = r'*******' #实际使用时修改为实际用户名 16 PASSWORD = r'*******' #实际使用时修改为实际密码 17 FREQUENCY = 5 18 19 print('****************************************************************') 20 print('* FILE_Transfers V1.0 *') 21 print('* Copyright by YU SHENG XI *') 22 print('****************************************************************') 23 print('The programe is running....') 24 25 def make_file(src_file_list,file_name): 26 fp = open(file_name,'w') 27 for ph in PHONE_LIST: 28 for li in src_file_list: 29 fp.write(ph +' '+'There has file:' + li +'\n') 30 fp.close() 31 32 def ftp_transfer(ftp_server,username,password,des_path,file_name): 33 ftp = FTP(ftp_server) 34 ftp.login(username, password) 35 fp = open(file_name,'rb') 36 ftp.cwd(des_path) 37 ftp.storbinary('STOR '+file_name,fp) 38 fp.close() 39 ftp.close() 40 41 def main(): 42 tmp_file = None 43 tm = datetime.datetime.now().strftime('%Y%m%d%H%M') #获取当前时间 44 file_name = tm+'.txt' #以当前时间作为文件名称 45 while True: 46 time.sleep(FREQUENCY) 47 src_file_list = scanf_file(DIR) #扫描原文件路径,获取文件名列表 48 if tmp_file!= src_file_list: 49 make_file(src_file_list,file_name) 50 tmp_file = src_file_list 51 ftp_transfer(FTP_SERVER, USERNAME, PASSWORD, DES_PATH,file_name) 52 os.remove(file_name) 53 54 if __name__ == '__main__': 55 main()
PS:第一次写程序,函数模块和主程序模块分得不是很清,主程序模块也含有两个功能函数,今后程序需要注意,尽量将功能函数写在函数模块内,在主程序模块进行调用即可,提高程序的清晰度和可读性。