【python】PythonのExcel操作:データの読み書き


PythonのExcel操作:データの読み書き
Email:[email protected]
ただ記録としては、後で調べるのに便利なので、必ずしも実用的ではありません.使用するモジュール:xlrdとxlwtで、それぞれ読み取りと書き込みに使用されます.
1.excelテーブルを開く
   data = xlrd.open_workbook('data.xls')
2.ワークシートの取得
table = data.sheets()[0]#インデックス順で取得
        table = data.sheet_by_index(0)#インデックス順で取得
        table = data.sheet_by_name(u'Sheet 1')#名前で取得
 
3.行全体と列全体の値(配列)を取得する
   
         table.row_values(i)
         table.col_values(i)
 
4.行数と列数の取得
  
        nrows = table.nrows
 
        ncols = table.ncols
       
5.循環ラインリストデータ
        for i in range(nrows ):
      print table.row_values(i)
セル#セル#
cell_A1 = table.cell(0,0).value
 
cell_C4 = table.cell(2,3).value
 
行列インデックスの使用
cell_A1 = table.row(0)[0].value
 
cell_A2 = table.col(1)[0].value
6.書き込みデータ
f =Workbook()
sheet = f.add_sheet(u'sheet3',cell_overwrite_ok=True) #  sheet
sheet.write(0,0,100)
f.save(‘result.xls’)</span>

7.実践コード
# -*- coding:utf-8 -*-

import xlrd as excel
import collections as coll
from xlwt import *

#      


def get_value():
            try:
               return excel.open_workbook(src).sheet_by_index(1)
            except Exception,e:
                        print e
                        return 0
#        SAO  
po = []


def get_num_list( data ):
   p = coll.OrderedDict()
   typeCode = data.col_values(0)
   for i in range(1, data.nrows):
      if typeCode[i] not in p.keys():
         p[typeCode[i]] = 1
         po.append(i)
      else:
         p[typeCode[i]] = p[typeCode[i]] +1
   return p

def calDis(data, p, po, k,result):
   f =Workbook()
   sheet = f.add_sheet(u'sheet3',cell_overwrite_ok=True) #  sheet
   m = -1
   for (codeA, numA) in p.items():#        A
      m = m + 1
      n = -1
      for (codeB, numB) in p.items():#         B
         sum = 0
         n = n + 1
         if n == m :
            continue
         else:
            if n > m:
               for i in range(po[n],po[n]+numB):
                  for j in range(po[m],po[m]+numA):
                      if data.row_values(i)[j]>=k:
                        sum = sum + 1

            else:
               for i in range(po[m],po[m]+numA):
                  for j in range(po[n],po[n]+numB):
                     #print data.row_values(i)[j]
                      if data.row_values(i)[j]>=k:
                           sum = sum + 1
         sheet.write(m+1,n+1,(float(sum*2)/(numA+numB)))

   i = 1
   for (codeA,k) in p.items():
      #j = 1
      sheet.write(0,i,codeA)
      sheet.write(i,0,codeA)
      i = i + 1
   f.save(result)

if __name__ == '__main__':
            # ...........
            #     【   】
            src = '09-result.xlsx'
            #   【   】
            k = 0.1
            #          【  :      _result.xls】
            result = src.split('.')[0]+'_'+'result'+'.xls'
            # ..........
            data = get_value()
            if(data==0):
               print '     '
            else:
               p = get_num_list(data)
               calDis(data,p,po, k,result)