Chinaunix首页 | 论坛 | 博客
  • 博客访问: 351891
  • 博文数量: 26
  • 博客积分: 495
  • 博客等级: 下士
  • 技术积分: 562
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-26 13:50
文章分类

全部博文(26)

文章存档

2015年(9)

2014年(6)

2013年(7)

2012年(2)

2011年(2)

分类: Python/Ruby

2011-04-27 11:04:05

最近要将xls表中服务器信息导入数据库中,花了很长的时间,其实不难,主要是我在选择什么样的方法上面费了很长时间
下面是关键脚本:
xls的格式:
 1st   2nd     3rd ........   若干列
|      | xxxx2| g2 |  
|xxx1  | xxxx3| g3 |    
|      | xxxx4| g4 |

xxx[1234],g[234]彼此都不一样,第2列跟第3列是一一对应关系,就是要保证导出数据 xxx2要对应g2,以下同理,
还有第二,三列有小于等于3条记录,但是不可能第二列比第三列的数据少如(每行记录都这样):
---------------------------------------------------------------------
|     | xxxx2| g2 |  
|xxx1 | xxxx3|    |    
|     | xxxx4| g4 |
-----------------------------------------------------------------
|     | xxxx2| g2 |  
|xxx1 |      |    |    
|     | xxxx4| g4 |
--------------------------------------------------------------------
|     | xxxx2|    |  
|xxx1 | xxxx3|    |    
|     | xxxx4|    |
------------------------------------------------------------------------
|     | xxxx2|    |  
|xxx1 | xxxx3| g3 |    
|     | xxxx4|    |
-------------------------------------------------------------------
将xls中的数据导出文件,按照指定的格式,我定义的是字典格式
#!/usr/bin/python
import xlrd
import sys
import MySQLdb


def xls2dict(file):
    dict = {}
    data = xlrd.open_workbook(file) # 打开xls文件
    table = data.sheets()[0]   # 打开第一张表
    rownu = table.nrows   #有多少行要处理
    for i  in range(rownu):
        d ={}
        k = table.cell(i,0).value.encode("utf-8").strip('\n') ## table.cell(i,0)取得每行第一列,i,0表示坐标
        wanip = table.cell(i,1).value.encode("utf-8").split('\n')
        srv = table.cell(i,2).value.encode("utf-8").split('\n')
        newdict = map(gendict,wanip,srv)
        other = [x.encode("utf-8") for x in table.row_values(i)[-3:]] # get last 3 records
        for i in newdict:
            if i.keys()[0] != None and  i.keys()[0] != '':  # 第二列中的记录数,小于等于3,去除空行
               d.update(i.copy()) #字典合并
        other.append(d)
        dict[k]=other
    return dict

###
def gendict(a,b):
    d={}
    d[a]=b
    return d



if __name__ == "__main__":    #写入文件
    fp = open('informations.txt','a')
    for k,v in xls2dict(sys.argv[1]).items():
         fp.write("{'%s':%s}\n" %(k,v))
    fp.close()


最终结果:
{'172.22.1.18':['114.80.106.18', 'F14', 'SR5107S1011204', {'114.80.106.78': '1p1k_12', '114.80.106.18': '', '114.80.106.77': '6711_72'}]}

只写这么多吧,因为用到xls就这个,怎么插入数据库,google上很多











阅读(1686) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:一些有用的shell

给主人留下些什么吧!~~