工作中的第一个小需求:扫描一个文件夹,查看是否有文件或者有新的文件,如果有,按照固定短信发送格式生成文件,通过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:第一次写程序,函数模块和主程序模块分得不是很清,主程序模块也含有两个功能函数,今后程序需要注意,尽量将功能函数写在函数模块内,在主程序模块进行调用即可,提高程序的清晰度和可读性。