当一个excel文件的sheet比较多时候, 这时候需要获取所有的sheet的名字.
xl = pd.ExcelFile('foo.xls')
xl.sheet_names # see all sheet names
xl.parse(sheet_name) # read a specific sheet to DataFrame
也可以直接读取所有的sheet, 将sheetname设置为None. 这时候得到的是一个dict结果.
df = pandas.read_excel("/yourPath/FileName.xlsx", None);
"df" are all sheets as a dictionary of DataFrames, you can verify it by run this:
df.keys()
邮件发送
#需要导入的包
import time
import pdb
from ubpa.ilog import ILog
from ubpa.base_img import *
import getopt
from sys import argv
import sys
from sys import argv
from ubpa.base_img import *
from ubpa.ilog import ILog
from ubpa.itools import rpa_import
from ubpa.itools import rpa_import
GlobalFun = rpa_import.import_global_fun(__file__)
import getopt
import pdb
import sys
import time
import ubpa.iautomation as iautomation
import ubpa.ibox as ibox
import ubpa.iexcel as iexcel
import ubpa.ikeyboard as ikeyboard
import ubpa.ioutlook as ioutlook
import ubpa.itools.rpa_str as rpa_str
import ubpa.iwin as iwin
邮件发送代码
老数据清理
清理文件夹,将老数据的文件转移到历史文件夹下面
old_data=r'D:\Parameter_modification\parameter_data\Data\client_data'
def now_date(old_data):
# 现在的日期
now_time = time.strftime('%Y-%m-%d_%H%M%S', time.localtime(time.time()))
# 历史文件夹
history_file = 'D:/Parameter_modification/parameter_data/History' + '/' + now_time
# 判断history文件夹存不存在
if not os.path.exists(history_file):
# 创建历史
os.mkdir(history_file)
# move_file就是要移动的文件夹
# 判断历史文件夹下main有没有存在将要从client_data下移动过来的文件
for move_file in glob.glob(old_data + '\\' + '*'):
# print(move_file)
# h_l列表里面是当天历史文件夹下main的文件
h_l = glob.glob(history_file + '\\' + '*')
l2 = []
# 循环这个列表
for i in h_l:
l2.append(i[-4:])
# 要是client_data文件夹里面的文件在当天历史文件夹里面
if move_file[-4:] in l2:
os.system('rd/s/q ' + move_file)
print('删除了%s' % move_file)
else:
shutil.move(move_file, history_file)
老数据的清理
发送邮件的基本信息及过滤
# 读取整列
# 获取邮件的发送人员
address = iexcel.read_col(path='D:/Parameter_modification/parameter_data/Data/mail/send_mail_people.xlsx')
# 读取整列
# 获取本地的邮箱账号
mail_username = iexcel.read_col(path='D:/Parameter_modification/parameter_data/Data/mail/send_mail_people.xlsx',
cell='B1')
# 读取整列
# 获取邮箱的主题
topic_filtering = iexcel.read_col(path='D:/Parameter_modification/parameter_data/Data/mail/send_mail_people.xlsx',
cell='C1')
# 获取到的数据进行过滤
address = address[1:]
mail_username = mail_username[1:2][0]
topic_filtering = topic_filtering[1:2][0]
print(address, mail_username, topic_filtering)
View Code
接收邮件
# 接收outlook邮件
#邮件的接收人mail_account,邮件的发送者sender_filter,邮件主题subject_filter, 变为已读状态mark_as_read,收取未读状态only_unread,又将附件存储地址attachment_path
mail_receving = ioutlook.recv_outlook(mail_account=mail_username, sender_filter=addr, subject_filter=topic_filtering,mark_as_read=False, only_unread=True, attachment_path='D:/Parameter_modification/parameter_data/Data/mail/mail_rece_file/')
接收邮件配置
数据过滤
将附件中的文件转移到新的文件夹中本分类
def mail_guolv(mail_recv_path, client_data):
# 邮件存储路径
# ll就是文件夹下面的所有的文件名字,是个列表
l1 = glob.glob(mail_recv_path + '\\' + '*')
# 定义三个列表对接受到的邮件进行过滤,先写3个,后面再有的书数据再进行添加l_交易
l_TFG50 = [] # 对公大额存单系统参数
l_T3280 = [] # 对私大额存单系统参数
l_TBC13A = [] # 新安享赢产品参数表(新增)
# l1=os.listdir(mail_recv_path)
for i in l1:
# print(i)
if i.endswith('.xlsx' or 'xls'):
# print(i)
if '对公大额存单系统参数' in i:
l_TFG50.append(i)
elif '对私大额存单系统参数' in i:
l_T3280.append(i)
elif '新安享赢产品参数表' in i:
l_TBC13A.append(i)
# 将要创建的文件夹
path_TFG50 = client_data + '\\' + 'TFG50'
path_T3280 = client_data + '\\' + 'T3280'
path_TBC13A = client_data + '\\' + 'TBC13A'
print(path_TFG50)
print(path_T3280)
print(path_TBC13A)
# 使用os.mkdir创建文件夹
if not os.path.exists(path_TFG50):
os.mkdir(path_TFG50)
if not os.path.exists(path_T3280):
os.mkdir(path_T3280)
if not os.path.exists(path_TBC13A):
os.mkdir(path_TBC13A)
for l_t in l_TFG50:
if os.path.isfile(l_t):
print(l_t)
# 使用move就是移动,而copy就是拷贝
shutil.move(l_t, path_TFG50)
# shutil.copy(l_t,path_TFG50)
for l_t in l_T3280:
if os.path.isfile(l_t):
print(l_t)
# 使用move就是移动,而copy就是拷贝
shutil.move(l_t, path_T3280)
# shutil.copy(l_t,path_T3280)
for l_t in l_TBC13A:
if os.path.isfile(l_t):
print(l_t)
# 使用move就是移动,而copy就是拷贝
shutil.move(l_t, path_TBC13A)
# 就算里面有也不会覆盖
# shutil.copy(l_t,path_TBC13A)
#收到的文件都分类好了之后把剩下的脏数据进行删除处理
for qt in glob.glob(mail_recv_path +'\\'+'*'):
os.remove(qt)
View Code
将分好类的文件夹进行数据的处理(过滤及分类)
# 过滤TFG50文件
def filteration_TFG50(document):
# 先定义一个字典,然后作为返回值
dic = {'trade name': 'TFG50', 'success': None, 'failed': None}
fail = []
# 客户端需要的数据
client_datas = []
# TFG50表格路径
# print(document)
# document就是data文件夹下TFG50的路径
# 获取文件夹下所有的文件,是个列表
file_names = os.listdir(document)
# print(file_names)
# 所有的TFG50表格文件
for file_name in file_names:
# 看列表中是否有~开头的,有的话给过滤掉
if file_name.startswith('~'):
continue
file_name = document + '/' + file_name
# print(file_name,'你好')
try:
# 判断是否是文件
if os.path.isfile(file_name) == True:
if '-' in file_name:
# 将文件切割
l = file_name.split('-')
# 要改的新的文件名
file_name_new = l[0] + ".xlsx"
# 修改文件名(D:\Parameter_modification\Data\FG50\对公大额存单系统参数20190715.xlsx)
os.rename(os.path.join(document, file_name), os.path.join(document, file_name_new))
print('TFG50文件' + document + file_name_new)
file_name_new = document + file_name_new
else:
file_name_new = file_name
# file_name_new就是TFG50下面的所有的文件详细路径
print(file_name_new)
# 获取表格的sheet名字
sheet_names = pd.ExcelFile(file_name_new).sheet_names
for sheet_name in sheet_names:
print(sheet_name)
# 读取excel表格
df = pd.read_excel(io=file_name_new, sheet_name=sheet_name)
# 将nan编程替换成空字符串
df = df.fillna(value='')
# 读取表格的c列和D列
dc_d = df.iloc[0:, 2:4]
# 就是字段的c列和d列组成的列表
l_c_d = dc_d.values.tolist()
# print(l_c_d)#输出当前工作表中的字段和信息
# 循环启动输出客户类型和参数值,每一个line就是类似于这个['操作标志', 'I'],['发行年度', '2019']
sign = 100 # 设置一个标志值,如果sign=line[0]说明该数据错误,应该记录台账,不再往下进行
for line in l_c_d:
#就是一些数据的比对,不能给你们看
pass
if sign == 100:
print('文件 >>%s 中 >>%s工作表通过验证' % (file_name_new, sheet_name))
# 创建两个空列表,然后组合成字典
l_key = []
l_value = []
for line in l_c_d:
l_key.append(line[0])
l_value.append(line[1])
'''
client_data是往客户端传递的数据
'''
client_data = dict(zip(l_key, l_value))
client_datas.append(client_data)
else:
# 现在的时间
now_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
# 台账信息
mess = '文件:%s--工作表:%s--出错字段:%s--时间:%s' % (file_name_new, sheet_name, sign, now_time)
print(mess)
# 将将出错的台账信息放到列表中
fail.append(mess)
except Exception:
pass
# print(fail,client_datas)
dic['success'] = client_datas
dic['failed'] = fail
return dic
View Code
就这样得到了一个大的列表,列表里面是字典,几个交易就是几个字典,字典里面的数据就是{'success': None, 'failed': None}类似与这种样式的
这样我们的数据就处理好了,之后就可以进行数据的录入,替换等一些简单的操作了