12下一页
返回列表 发新帖

【疾病研究部练习题一】

[复制链接]

5

主题

20

帖子

318

积分

版主

Rank: 7Rank: 7Rank: 7

积分
318
发表于 2019-10-30 10:17:53 | 显示全部楼层 | 阅读模式
实际业务中,经常有需要读取excel文件的要求,例如在读取信息收集表的时候,同时也有时候需要把一些内容写入到excel文件当中,为了练习excel的读取,我们本周的题目是写一个脚本来读取excel文件中指定的一个或者多个sheet的内容并输出到一个文本文件中,使用\t进行分隔。用于读取的excel文件我给大家准备了一个,不过你也可以自己找一个。
大家可以在路径/WORK/Disease/chenming/Workshop/excel_example下找到该execl,同时你写的脚本也可以放在这个目录下,权限我已经修改了。
【大家可以在本帖下面回复自己的思路与我和其他小伙伴异同讨论】


5

主题

20

帖子

318

积分

版主

Rank: 7Rank: 7Rank: 7

积分
318
发表于 2019-10-30 10:22:22 | 显示全部楼层
之后的练习题我们将根据大家的反馈进行选择,大家有什么想实现的内容或者点子都可以在本帖下面回复
回复

使用道具 举报

2

主题

6

帖子

171

积分

注册会员

Rank: 2

积分
171
发表于 2019-11-1 17:40:59 | 显示全部楼层
  1. #!/usr/bin/env python
  2. #-*- coding:utf-8 -*-

  3. import sys
  4. from openpyxl import load_workbook

  5. Usage = "learn excel"
  6. if len(sys.argv) < 3:
  7.     print("Usage: learn how to read excel \npython exise.py workbook outfile ")
  8.     exit()
  9.    
  10. ## open excel
  11. def open_workbook(workbook):
  12.     wb = load_workbook(workbook)
  13.     sheet_names = wb.sheetnames
  14.     print(sheet_names)
  15.     dict_sheet_names = {}
  16.     for index,name in enumerate(sheet_names):
  17.         dict_sheet_names[index] = name
  18.     return wb, dict_sheet_names

  19. ## get needed sheet
  20. def get_sheet(sheetname, wb, outfile):
  21.     with open(outfile, 'w') as outdata:
  22.         ws = wb[sheetname]     # get sheet by name
  23.         for row in ws.rows:
  24.             for cell in row:
  25.                 outdata.write('%s\t' % cell.value)  
  26.             outdata.write('\n')  

  27. if __name__ == "__main__":
  28.     workbook = sys.argv[1]
  29.     outfile = sys.argv[2]
  30.    
  31.     wb, dict_sheet_names = open_workbook(workbook)
  32.     for k,v in dict_sheet_names.items():
  33.         print(k,":",v)
  34.     sheetname = input('请输入想要查看的sheet名称:')
  35.     get_sheet(sheetname,wb, outfile)
复制代码
回复

使用道具 举报

5

主题

20

帖子

318

积分

版主

Rank: 7Rank: 7Rank: 7

积分
318
发表于 2019-11-4 16:33:06 | 显示全部楼层

明祝的功能实现很棒,代码书写也较为规范,不过还可以再优化一些,例如,我如果事先并不知道sheet名称就没办法提取;sheet名称较长的时候,可不可以用数字来代替呢?
回复

使用道具 举报

5

主题

20

帖子

318

积分

版主

Rank: 7Rank: 7Rank: 7

积分
318
发表于 2019-11-6 17:06:05 | 显示全部楼层
更正一下,是吕梦婷。。。
回复

使用道具 举报

5

主题

20

帖子

318

积分

版主

Rank: 7Rank: 7Rank: 7

积分
318
发表于 2019-11-6 18:02:18 | 显示全部楼层
实际上,我们针对Excel2003版本,也就是以.xls为结尾的文件,我们需要使用xlrd和xlwt来处理,而针对Excel2007及以上的版本,则可以使用openpyxl模块来处理,这里我写了一个openpyxl实现的脚本,大家可以去我的github仓库查看https://github.com/KingCM/Utilit ... on/excel_to_text.py
回复

使用道具 举报

5

主题

20

帖子

318

积分

版主

Rank: 7Rank: 7Rank: 7

积分
318
发表于 2019-11-12 10:28:10 | 显示全部楼层
关于使用openpyxl模块去操作一些excel的样式,比如字体,颜色,行宽,边宽和行高等内容,可以参考我写的一篇博客https://blog.csdn.net/qq_35696312/article/details/95060248
回复

使用道具 举报

5

主题

20

帖子

318

积分

版主

Rank: 7Rank: 7Rank: 7

积分
318
发表于 2019-11-12 10:38:07 | 显示全部楼层
我们打开http://www.python-excel.org/之后可以看到一些可以使用的,使用python来操作excel的模块,每一个模块都对应了文档,我们对哪个模块感兴趣,就可以点击进去读一下。这里着重需要看的是openpyxl和xlrd以及xlwt三个模块
回复

使用道具 举报

5

主题

20

帖子

318

积分

版主

Rank: 7Rank: 7Rank: 7

积分
318
发表于 2019-11-12 11:09:07 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

4

帖子

128

积分

注册会员

Rank: 2

积分
128
发表于 2019-11-13 10:04:40 | 显示全部楼层
  1. #!usr/bin/env python2
  2. #-*- coding: utf-8 -*-

  3. from openpyxl import load_workbook
  4. from openpyxl import Workbook


  5. def sheetDes(wb):
  6.     '''
  7.     describe each sheet of excel
  8.     sheetD={'sheetname':(maxrow,maxcolumn)}
  9.     '''
  10.     sheets=wb.get_sheet_names()
  11.     sheetD={}
  12.     for each in sheets:
  13.         sheetD[each]=(wb.get_sheet_by_name(each).max_row,wb.get_sheet_by_name(each).max_column)
  14.     return sheetD

  15. def getSheetTitle(sn):
  16.     '''
  17.     get title of the sheetname you choose
  18.     '''
  19.     bs=wb.get_sheet_by_name(sn)
  20.     for col in range(1, sheetD[sn][1]+1):
  21.         val=bs.cell(1,col).value
  22.         print col,val
  23.     return bs

  24. def getContext(cols,outfile):
  25.     '''
  26.     output columns to text
  27.     '''
  28.     with open(outfile,'w') as outf:
  29.         for r in range(1, sheetD[sn][0]+1):
  30.             line=''
  31.             for c in cols.split(','):
  32.                 line+=bs.cell(row=r, column=int(c)).value+'\t'
  33.             outf.write(line.strip()+'\n')

  34. if __name__=='__main__':
  35.     wb = load_workbook('./AML_MDS_in_OMIM_and_HGMD.xlsx')
  36.     sheetD=sheetDes(wb)
  37.     for k,v in sheetD.items():
  38.         print "sheet name:",k," rows:",v[0]," columns:",v[1]
  39.     while True:
  40.         sn=raw_input("please choose a sheetname:")
  41.         if sn not in sheetD:
  42.             sn=raw_input("please choose a sheetname:")
  43.         else:
  44.             bs=getSheetTitle(sn)
  45.             tn=raw_input("titles split by comma:")
  46.             getContext(tn,sn+'_'.join(tn.split(','))+'.txt')
  47.             yn=raw_input("continue or exit (y/n):")
  48.             if yn == "y":
  49.                 continue
  50.             elif yn == "n":
  51.                 break
  52.             else:
  53.                 print "please choose y or n!"
复制代码
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则