最近要将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上很多
阅读(1717) | 评论(0) | 转发(0) |