当一个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()

邮件发送

python 如何实现RPA python rpa教程_python 如何实现RPA

python 如何实现RPA python rpa教程_python 如何实现RPA_02

#需要导入的包
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

邮件发送代码

老数据清理

清理文件夹,将老数据的文件转移到历史文件夹下面

python 如何实现RPA python rpa教程_python 如何实现RPA

python 如何实现RPA python rpa教程_python 如何实现RPA_02

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)

老数据的清理

发送邮件的基本信息及过滤

python 如何实现RPA python rpa教程_python 如何实现RPA

python 如何实现RPA python rpa教程_python 如何实现RPA_02

# 读取整列
# 获取邮件的发送人员
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

接收邮件

python 如何实现RPA python rpa教程_python 如何实现RPA

python 如何实现RPA python rpa教程_python 如何实现RPA_02

# 接收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/')

接收邮件配置

数据过滤

将附件中的文件转移到新的文件夹中本分类

python 如何实现RPA python rpa教程_python 如何实现RPA

python 如何实现RPA python rpa教程_python 如何实现RPA_02

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

将分好类的文件夹进行数据的处理(过滤及分类)

python 如何实现RPA python rpa教程_python 如何实现RPA

python 如何实现RPA python rpa教程_python 如何实现RPA_02

# 过滤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}类似与这种样式的

这样我们的数据就处理好了,之后就可以进行数据的录入,替换等一些简单的操作了