生物行业一名普通的实验搬砖者,半路出家学习Python……
目前所做的项目对数据整理需求比较大,数据内容多,序列的不唯一性导致工作量的加大,故想着通过脚本实现简单化工作,开始我的代码堆积……
a.读取源文件和目标文件的数据并做些简单的统计(row或col)
b.读取源文件和目标文件中可用作判断的数据进行遍历
c.新建Excel表将目标文件按行写入。
d.再将源文件和目标文件用作判断的数据进行比较,满足条件将需要提取源文件的数据补充到新建的Excel数据中
使用第三方库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()
通过以上进行实现固定文件格式的数据匹配,后续可以考虑定义变量,对不同格式文件指定列的数据进行操作,后续根据需要进行修改。
代码堆积的路还很长,实践中进行收获,后续努力将该项目数据整理流程实现程序化,未完待续……