01_使用Python对Excel文件中的数据进行匹配操作

我的第一次工作上实现Python代码堆积

生物行业一名普通的实验搬砖者,半路出家学习Python……

0. 为什么会写这个脚本

目前所做的项目对数据整理需求比较大,数据内容多,序列的不唯一性导致工作量的加大,故想着通过脚本实现简单化工作,开始我的代码堆积……

1. 如何实现—确认思路

a.读取源文件和目标文件的数据并做些简单的统计(row或col)
b.读取源文件和目标文件中可用作判断的数据进行遍历
c.新建Excel表将目标文件按行写入。
d.再将源文件和目标文件用作判断的数据进行比较,满足条件将需要提取源文件的数据补充到新建的Excel数据中

2. 开始操作—代码堆积

使用第三方库xlrd和xlwt进行

# -*- coding: utf-8 -*-
import xlrd
import xlwt
#分别读取源文件和目标文件的数据
def MatchExcelData():
    source_file_path = input("输入源文件的绝对路径:")
    target_file_path = input("输入目标文件的绝对路径:")
    target_new_filename = input("输入保存新目标文件的路径及名称:")
    # 读取源文件和目标文件数据
    source_data = xlrd.open_workbook(source_file_path)  # 打开源文件的excel表
    target_data = xlrd.open_workbook(target_file_path)  # 打开目标文件的excel表
    # 获取工作表中的内容
    source_table = source_data.sheets()[0]
    target_table = target_data.sheet_by_index(0)
    #获取源文件的行数和列数
    nrows_source = source_table.nrows
    #ncols_source = source_table.ncols
    # 获取目标文件行数和列数
    nrows_target = target_table.nrows
    ncols_target = target_table.ncols

    # 新建新的目标文件用于写入
    target_new_data = xlwt.Workbook()
    # 在已创建的新的文件中创建一个新的sheet
    target_new_table = target_new_data.add_sheet('sheet1', cell_overwrite_ok=True)

    for m in range(nrows_target):
        for n in range(ncols_target):
            value_target_col = target_table.cell(m, n).value
            target_new_table.write(m, n, value_target_col)

    #对源文件和目标文件Excel指定数据进行操作
    for i in range(nrows_source):
        #获取源文件第2列数据(ForwardPrimer序列)
        value_source_col_2 = source_table.cell(i,1).value
        #获取源文件第5列数据(带有Uni序列的ReversePrimer序列)
        value_source_col_5 = source_table.cell(i, 4).value
        # 获取源文件第6列数据(引物合成编号)
        value_source_col_6 = source_table.cell(i, 5).value
        for x in range(nrows_target):
            #获取目标文件第9列数据(ForwardPrimer序列)
            value_target_col_9 = target_table.cell(x,8).value
            #获取目标文件第10列数据(ReversePrimer序列并对在其5'加上如下通用序列)
            value_target_col_10 = target_table.cell(x, 9).value
            value_target_col_10_uni = str("GTGCTCTTCCGATCT" + str(value_target_col_10))

            if value_source_col_2 == value_target_col_9 and value_source_col_5 == value_target_col_10_uni:
                target_new_table.write(0, ncols_target, 'Primer_Num')
                target_new_table.write(x, ncols_target, value_source_col_6)
            else:
                continue

        target_new_data.save("%s.xls"%target_new_filename)


if __name__ == '__main__':
    MatchExcelData()

通过以上进行实现固定文件格式的数据匹配,后续可以考虑定义变量,对不同格式文件指定列的数据进行操作,后续根据需要进行修改。

3. 最后

代码堆积的路还很长,实践中进行收获,后续努力将该项目数据整理流程实现程序化,未完待续……

你可能感兴趣的:(Python实战笔记)