使用python办公自动化处理紫外数据-xlwt快速实现将一行转为多行多列

xlwt快速实现将一行转为多行多列

当我在使用Thermo Scientific的紫外来测试释放动力学曲线的时候,就是在间隔一段时间对样品扫描一次紫外(就是1个循环),得到的多个循环的数据。这时候我们导出的一个CSV的数据,CSV的数据的格式是只有2列,每隔404列就会空2行,然后到下一个循环的数据。这对我们在origin里面画图非常麻烦,每次都有复制黏贴,然后滚动翻页,再复制黏贴。非常麻烦,还容易出现遗漏的。因此我就想着用python来写一段代码,实现可自动化操作,因为循环有可能高达100次,复制黏贴太要命了。
使用python办公自动化处理紫外数据-xlwt快速实现将一行转为多行多列_第1张图片

代码如下


import pandas as pd
import xlwt

file = pd.read_csv('BTA-MSNs0201.csv',header=None,sep=',') #读取数据名字,没有表头,分隔符为逗号
# print(file) #打印表单看看 ##发现pandas帮我们跳过了空行!!!
book = xlwt.Workbook(encoding="utf-8", style_compression=0) # 新建一个表格,编码为通用,不压缩
sheet = book.add_sheet('汇总', cell_overwrite_ok=True) # 新建一个表单,是否可以覆盖写入,是
print("-"*20)
print("有多少行",file.shape[0])
print("有多少列",file.shape[1])
print("-"*20)
print('一组数据有',404,'行')
print('一组数据有',2,'列')
lieshu = file.shape[1]
hangshu = file.shape[0]
print("-"*20)
print('一共有多少个循环实验的数据',hangshu/404)
cycles = hangshu/404
print("-"*20)
# print('第一列第三个单元格是',file[0][2])#测试用
i = 0
j = 0
k = 0

for cycle in range(int(cycles)): #计算结果是浮点数,所以要将其变成整数,第几个循环
    hang=404*(1+cycle) #一次要读的行数的终点
    # print(hang)
    for j in range(2):
        h=0
        for i in range(hang-404,hang): # 每个循环的行的开始,每个循环的行的结束
            # print(file[j][i]) #pd.read_csv的数据是先列后行
            sheet.write(h, j+k, file[j][i]) #写入数据,行,列,csv的数据
            h=h+1 #h其实是404
    k=k+2 #完成了1个循环之后跳2行写入新的数据
print("-"*20)
book.save('将紫外数据一列转化成方便使用的多列.xls')  # 保存名字或者路径,要给一个“”的字符串
print("save successfully","从txt原始数据整理及保存到excel表格")
print("-"*20)

#保存得到的excel表格里面会不知为何有报错,但是复制到origin里面作图就没问题了

但是我还是遇到了下面的几个问题

  1. 程序没问题,但是要人工用肉眼去找并且用手输入“404”行(1次循环),这一点还是比较不够自动化
  2. 保存得到的excel表格里面会不知为何有报错,但是复制到origin里面作图就没问题了
  3. 报错是excel的每个单元格左上角都有绿色的小标签,说“此单元中数字为文本格式,或者其前面有撇号”

使用python办公自动化处理紫外数据-xlwt快速实现将一行转为多行多列_第2张图片

问题解决方案

问题1 数单独1次循环有多少行
使用enumerate函数成功

chongfu = []
for i, item in enumerate(file[0]):
    if item == 'bta1':
        print(i,item)
        chongfu.append(i)
print(chongfu[1],'数组中的第二个就是每个的长度了')
输出结果如下:
0 bta1
404 bta1
808 bta1
1212 bta1
1616 bta1
2020 bta1
2424 bta1
2828 bta1
3232 bta1
3636 bta1
404 数组中的第二个就是每个的长度了

你可能感兴趣的:(excel,csv)