http://blog.csdn.net/suofiya2008/article/details/5589627 我们写程序,l常会需要输Z些数据进行保存,对于格式固定的大量数据,Excel表格会是比较好的一个选择。如果你需要在Python下写入Excel文gQ那么就需要用到PyExcelerator了?p>PyExcelerator是一个第三方库,用来处理Excel文g。它的优ҎQ?/p>单易用,上手快?/p>
写操作很方便Q适合用来生成Excel文g记录数据?/p>
不需要WinCOM支持Q没装Office?可以生成Excel表格
当然QPyExcelerator也是有缺点的Q它所提供的读写操作方式相对简单,要对已有的Excel文gq行修改Q就昑־比较ȝ了?/p>
如果要对已有的Excel表格q行较复杂的修改操作Q选择PyExcelerator׃太合适了Q这时候可以试试另外的Ҏ。比如用pywin32通过WinCOM来操作Excel表格Q或者用xlrd?/p>
PyExcelerator的官方主|http://sourceforge.net/projects/pyexcelerator Q程序包中ƈ没有太多的教E文档,不过包含了一些简单的C操作的小例子Q如果需要更详细的信息,只能读源代码了?/p>
一。初始pyExcelerator
pyExcelerator是一个基于python的可以读写excel文g的品。和xlrd相比QpyExcelrator的主要特点在于可以对excel文gq行写操作。但是在d数据斚wQ功能就没有xlrd强大了?/p>
pyExcelerator只能提供关于表单内容的基数据Q对于表单行数、列数、单元格数据cd{详l信息都没有提供讉K接口。因此开发h员必M解表单的具体l构Q才对表单中的数据进行正的分析转换?/p>
pyExcelerator产品包(pyexcelerator-0.6.3a.tgzQ上传到服务器上之后解压~,然后在品目录下键入如下命oQ?/p>
# python setup.py install
在命令行中,你将看到一q串的runningQcreatingQcopyingQbyte—compiling命ol果Q吧啦吧啦。。?
最后一行出?
Writing C:/Python26/Lib/site-packages/pyExcelerator-0.6.4.1-py2.6.egg-info
说明已经插件安装到你的python环境中了Q至此安装完成?
q里提一个小例子Q?/pre>from pyExcelerator import * w = Workbook() ws = w.add_sheet('Hey, Hades' ) ws.write(0 , 0 , 'bit' ) ws.write(0 , 1 , 'huang' ) ws.write(1 , 0 , 'xuan' ) w.save('mini.xls' ) from pyExcelerator import *
w = Workbook() #创徏一个工作簿
ws = w.add_sheet('Hey, Hades') #创徏一个工作表
ws.write(0,0,'bit') #??列写入bit
ws.write(0,1,'huang') #??列写入huang
ws.write(1,0,'xuan') #??列写入xuan
w.save('mini.xls') #保存 二、Excel文gdfrom pyExcelerator import * sheets = parse_xls('d:/a.xls')
很简单,?xlrd 不同。xlrd 需要先调用book = xlrd.open_workbook(filename)打开文档Q然后再调用sh= book.sheet_by_index(i)来得到第几个sheetQ然后再使用sh.cell_value(i,j)得到i行j列的单元格的倹{操作多了一炏V而上面的parse_xls(filename)则直接返回一个列表,每一就是一个sheet的数据。每Ҏ一个二元组(表名,单元格数?。其中单元格数据Z个字典,键值就是单元格的烦?i,j)。如果某个单元格无数据,那么׃存在q个倹{看似简单,但从处理上不?nbsp; xlrd 一P可以知道每个sheet的最大行数和列数Q然后进行@环。而?pyExcelerator好象没有最大行数和列数Q再加上I数据又不存在,因此在处理上相对ȝ一些。这样在处理上还需要注意。它?xlrd 一样都支持 unicodeQ但好象没有 xlrd 一h便地判断单元格的cd的方法,感觉q是 xlrd在功能上可能要强一些。当然这只是个h感觉Q再加上只是看了看例子,q没有怎么使用?
三、Excel文g写入q个才是重头。那么安装好 pyExcelerator 之后Q读?Readme.txt 之后了解到它的文档正在进行当中,因此惛_了解如何使用它需要看它所带的例子Q甚至看源程序。下面是我从例子中了解的如何写一?Excel 文档需要了解的?
Z方便Q在导入q个模块中用了import *的方式?
from pyExcelerator import *
首先导入模块Q然后是生成工作薄?
w = Workbook()
接着是加入一个工作表(sheet)?
ws = w.add_sheet('Hey, Dude')
然后可以保存了?
w.save('mini.xls')
上面的代码加在一起就是:
from pyExcelerator import *
w = Workbook() ws = w.add_sheet('Hey, Dude') w.save('mini.xls')
q就是最的一个例子了Q在例子中叫mini.py。你可以在例子目录下q行mini.py看一看是不是生成了一个空的Excel文g?
如果惛_入中文很单,改ؓQ?
#coding=cp936 from pyExcelerator import *
w = Workbook() ws = w.add_sheet(u'q是中文') w.save('mini.xls')
q样上面的执行结果是生成一个空Excel文gQ但它的W一个sheet的名字ؓ“q是中文”。就q样Q只要保证你写入时用unicodep了?
I文件可以生成,那么如何插入单元格呢Q?
ws.write(i, j, value)
其中value为|可以是unicode?
接着Q我们可能想改变单元格的样式Q如字体Q?
font0 = Font() font0.name = 'Times New Roman' font0.struck_out = True font0.bold = True
style0 = XFStyle() style0.font = font0
q样我们创徏了一个字体,然后又生成了一个样式。注意,真正起作用的是样?/strong>Q字体不q是样式中的一U效果?
q样在写入单元格时带着q个样式p了,q是使用上面的write()ҎQ?
ws.write(1, 1, 'Test', style0)
q是在名为ws的sheet中的W?1,1)单元格写入了gؓ"Test"的内容,q且它的样式为style0?
然后我们q可以设|单元格的边框:
borders = Borders() borders.left = 5 style.borders = borders
上面创徏了一个边框效果,讄了左ҎQ至于5是什么意思,我也不清楚,随便写的。然后放到样式中?/div>
上面的例子可以参考format.pyE序
其它q有许多的效果,单地列一下:
CZ?/td> 说明 col_width.py 改变单元格宽?nbsp; row_style.py 讄行的高度 merged*.py 单元格合q?nbsp;
image.py 插入囄
outline*.py 大纲效果(以前真没用过)
wsprops.py sheet的属性值打?nbsp;
xls2*.py Excel转ؓ其它的文件格?nbsp;
大家有兴自已照着例子学吧?/p>
四: 旉示?/p>
l俺的boss写的一个小工具Q用Python对Excelq行l计Q然后把l束生成一个新的Excel表格Q用到?a target="_blank">xlrd?a target="_blank">pyExcelerator两个库?br /> 单的介绍一下这两个库,先说xlrdQ这个库读Excel比较方便Q各U方法用v来也挺方便: bk = xlrd.open_workbook('your.xls') sh = bk.sheets()[-1] 上面两句可以打开Excel表格中的一个sheetQsheets得到的是一个listQ存放所有的sheet?br />sh.nrows是该sheet中的行数Q知道这个后可以用for循环来读所有的单元gQ?br />sh.row(i)[3]q个׃表第i行的W?列?br /> 再看看pyExceleratorQ这个用h有点别扭Q?br />sheets = parse_xls('result.xls') 先打开一个表|sheets是一个listQ包含了所有表格的内容Q每一就是一个sheetQ而每个sheet是二元tupleQ第一个是该sheet的名字,W二个是一个dictQdict的key是一个二元组Q表C单元格的坐标,?0,0)Q第一行第一列?br /> 从上面的分析中可以得讉KExcel中第一个sheet的第一行第一列元素需要: sheets[0][1][(0,0)] pyExcelerator也不能得到行列数?br /> 写文件也比较单: wb = Workbook() ws = wb.add_sheet('result') ws.write(0,0,“hello”) wb.save('result.xls') ׃解释?-) 写文件时需要注意直接写Unicode内容q去Q而不要写~码q的内容?br /> lboss的代码:PYTHON: #!/usr/bin/env python # -*- coding=utf-8 -*- #Using GPL v2 import xlrd from pyExcelerator import * city = [(u'山城','[2,3]d+'),(u'水国','4d+'),(u'火县','5d+'), (u'土城','6d+'),(u'土国','7d+'),(u'火乡','8[1-5]d+'), (u'水乡','8[067]d+'),] fname = '0107CRM.xls' bk = xlrd.open_workbook(fname) sh = bk.sheets()[-1] nrows = sh.nrows #result中按序存放各city中各套餐的数?br />#序为XTa+、XTb、XTb+ result = [] for i in range(len(city)): result.append([0,0,0]) for r in range(1,nrows): num = str(sh.row(r)[3])[7:] flag = False for i in range(len(city)): if re.match(city[i][1],num): flag = True if sh.row(r)[2].value == 3001.0: break name = sh.row(r)[0].value.encode('utf8') if 'XTaQ? in name: result[i][0]+=1 if 'XTb' in name and 'XTbQ? not in name: result[i][1]+=1 if 'XTbQ? in name: result[i][2]+=1 if not flag: print "NO:"+num print result titles = [u'局?,u'?,u'M录入?,u'X?,…………] wb = Workbook() ws = wb.add_sheet('result') for i in range(len(titles)): ws.write(0,i,titles[i])for i in range(len(city)): ws.write(i+1,0,city[i][0]) ws.write(i+1,1,result[i][0]) ws.write(i+1,4,result[i][1]) ws.write(i+1,7,result[i][2]) ws.write(i+1,10,result[i][0]+result[i][1]+result[i][2]) ws.write(i+2,1,"=SUM(B2:B8)") wb.save('result.xls')
后记:
python对excel的操作确实不太强大,目前为止我只用过pyExceleratorQ还有一个xlrd-xlwt的pluginQ貌D几个Ҏ常简单的excel操作够用了Q?/p>
最q回头看q篇blog的阅读量q是挺大Q今天工作之余写下此后记Q希望能和各位python高手们交,共同提高Q?/p>
excel相关文章Q?br />
1.xlrd-xlwt模块 xlrddexcel文g(基本功能)
2. 我同事鱿鱼哥解决excel2007d的文?span class="link_title">
]]>
PYTHON与EXCELQopenpyxl dexcel2007 http://m.tkk7.com/pts/archive/2014/11/21/420389.htmlpts pts Fri, 21 Nov 2014 01:34:00 GMT http://m.tkk7.com/pts/archive/2014/11/21/420389.html http://m.tkk7.com/pts/comments/420389.html http://m.tkk7.com/pts/archive/2014/11/21/420389.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/420389.html http://m.tkk7.com/pts/services/trackbacks/420389.html 【FROM?/p>http://blog.csdn.net/suofiya2008/article/details/6284208 有一万年没来q儿写blog了,今天{着发版Q抽I来写点东西吧?/p>
python有很多模块都是用来操作excel的,比如xlrdQxlwtQpyExcelerator。用着很方便,但是问题是,只能支持?excel2003。虽然一般的应用其实_了,但是如果遇到了导出大量数据(过65535条)的需求时Qexcel2003׃够用了。所以我只?L一个能支持excel2007的模块?/p>
google了一下,发现了这个openpyxlQ不q网上也没什么中文的文档可以看,于是pq琢?/p>
I.安装
openpyxl的最新版本是1.5.0 下蝲地址 http://pypi.python.org/pypi/openpyxl/1.5.0
需求python的版本是2.6+ Q也是_如果centOSpȝ的机器想用,那得升pȝ的python。。?/p>
安装是解压~,然后cd到目录,然后
python setup.py install
你懂的~
II.dexcel2007文g
from openpyxl.reader.excel import load_workbook import MySQLdb import time startTime = time.time() wb = load_workbook(filename = r'empty_book.xlsx' ) print "Worksheet range(s):" , wb.get_named_ranges() print "Worksheet name(s):" , wb.get_sheet_names() sheetnames = wb.get_sheet_names() ws = wb.get_sheet_by_name(sheetnames[0 ]) print "Work Sheet Titile:" ,ws.title print "Work Sheet Rows:" ,ws.get_highest_row() print "Work Sheet Cols:" ,ws.get_highest_column() data_dic = {} for rx in range(ws.get_highest_row()): temp_list = [] pid = ws.cell(row = rx,column = 0 ).value w1 = ws.cell(row = rx,column = 1 ).value w2 = ws.cell(row = rx,column = 2 ).value w3 = ws.cell(row = rx,column = 3 ).value w4 = ws.cell(row = rx,column = 4 ).value temp_list = [w1,w2,w3,w4] data_dic[pid] = temp_list print 'Total:%d' %len(data_dic)
from openpyxl.reader.excel import load_workbook import MySQLdb import time startTime = time.time() wb = load_workbook(filename = r'empty_book.xlsx' ) print "Worksheet range(s):" , wb.get_named_ranges() print "Worksheet name(s):" , wb.get_sheet_names() sheetnames = wb.get_sheet_names() ws = wb.get_sheet_by_name(sheetnames[0 ]) print "Work Sheet Titile:" ,ws.title print "Work Sheet Rows:" ,ws.get_highest_row() print "Work Sheet Cols:" ,ws.get_highest_column() data_dic = {} for rx in range(ws.get_highest_row()): temp_list = [] pid = ws.cell(row = rx,column = 0 ).value w1 = ws.cell(row = rx,column = 1 ).value w2 = ws.cell(row = rx,column = 2 ).value w3 = ws.cell(row = rx,column = 3 ).value w4 = ws.cell(row = rx,column = 4 ).value temp_list = [w1,w2,w3,w4] data_dic[pid] = temp_list print 'Total:%d' %len(data_dic)
注意的是ws.cell()ҎQ支持的参数有两U,cellQ?/span> coordinate=None , row=None , column=NoneQ?/em>
coordinate坐标Qeg ws.cell("B1")
row ?column 是行和列 Q都是从0开?/p>
q有Q如果想取得格里的|得用ws.cell("A1").value 取到Q如果用qxlrdQ因为写法差不多Q可能就会忘记加value了?/p>
III.写入excel2007
写excel2007 import MySQLdb import time import sys from openpyxl.workbook import Workbook from openpyxl.writer.excel import ExcelWriter from openpyxl.cell import get_column_letter wb = Workbook() ew = ExcelWriter(workbook = wb) dest_filename = r'empty_book.xlsx' ws = wb.worksheets[0 ] ws.title = "range names" i=1 table = {} for record in records: for x in range( 1 ,len(record)+ 1 ): col = get_column_letter(x) ws.cell('%s%s' %(col, i)).value = '%s' % (record[x- 1 ]) i+=1 ws = wb.create_sheet() ws.title = 'Pi' ws.cell('F5' ).value = 3.14 ew.save(filename = dest_filename)
写excel2007 import MySQLdb import time import sys from openpyxl.workbook import Workbook from openpyxl.writer.excel import ExcelWriter from openpyxl.cell import get_column_letter wb = Workbook() ew = ExcelWriter(workbook = wb) dest_filename = r'empty_book.xlsx' ws = wb.worksheets[0 ] ws.title = "range names" i=1 table = {} for record in records: for x in range( 1 ,len(record)+ 1 ): col = get_column_letter(x) ws.cell('%s%s' %(col, i)).value = '%s' % (record[x- 1 ]) i+=1 ws = wb.create_sheet() ws.title = 'Pi' ws.cell('F5' ).value = 3.14 ew.save(filename = dest_filename)
注意的地方:
# col是用列号x为参敎ͼ调用了这个模块的get_column_letterҎ出来的字母Q这个比较蛋疹{?/span>
col = get_column_letter(x)
#在ؓ数据D值的时候,注意写的格式Q要不会有各U不靠谱的问题出玎ͼq个是用坐标的方式写的,其实用row Qcol的方式可能没那么ȝQ?/span>
ws.cell( '%s%s'%(col, i) ).value = '%s' % (record[x-1])
关于该模块的API 可以查询官方文档 http://packages.python.org/openpyxl/api.html
M来说Q这个模块还是挺方便的,但是问题是在对于python的版本有一定要求,如果在centOs上用Q可能会有些问题?/p>
本文只是单的写了下用的ҎQ之后格式超链接马的之后再填上~
]]> EXCEL函数能自动取当前sheet的名?/title> http://m.tkk7.com/pts/archive/2014/11/10/419857.htmlpts pts Mon, 10 Nov 2014 02:37:00 GMT http://m.tkk7.com/pts/archive/2014/11/10/419857.html http://m.tkk7.com/pts/comments/419857.html http://m.tkk7.com/pts/archive/2014/11/10/419857.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/419857.html http://m.tkk7.com/pts/services/trackbacks/419857.html 一?REPLACE(CELL("filename"),1,FIND("]",CELL("filename")),"")二?MID(CELL("filename"),FIND("]",CELL("filename"))+1,255) ]]> [转]Python GUI开发环境的搭徏 http://m.tkk7.com/pts/archive/2014/07/30/416370.htmlpts pts Wed, 30 Jul 2014 08:38:00 GMT http://m.tkk7.com/pts/archive/2014/07/30/416370.html http://m.tkk7.com/pts/comments/416370.html http://m.tkk7.com/pts/archive/2014/07/30/416370.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/416370.html http://m.tkk7.com/pts/services/trackbacks/416370.html FromQ?span style="font-family: verdana, 'courier new'; line-height: 21px;">http://blog.csdn.net/zhangxinrun/article/category/1134723转蝲Qhttp://www.cnblogs.com/sding/archive/2011/11/12/2246675.html
最q对Python的开发又来了兴趣Q对于Python的开发一直停留在一个表面层的认识,玩的部分比较大?/p>
Python的入手简单,语法让h׃释手Q在|络通信斚w自带有成熟的cdQ还有第三方开发的开源包?/p>
在GUI的开发上QPython自n带有TKinter库,q有W三方的?(比如wxPython, Qt)
今天来单介l下wxPython开发的环境搭徏与示?/p>
开发环境搭建采?em>wxFormBuilder + uiPad + wxPythonQ?/em>按照序q行安装
Python 2.6 下蝲地址Q?span style="color: #3366ff;">http://www.python.org/download/releases/2.6.7/
wxPython 2.8 下蝲地址Q?span style="color: #3366ff;">http://www.wxpython.org/download.php#stable
wxFormBuilder 3.2 beta 下蝲地址Q?span style="color: #3366ff;">http://sourceforge.net/projects/wxformbuilder/
uiPad 4.0 下蝲地址Q?span style="color: #3366ff;">http://www.onlinedown.net/soft/101104.htm
Python GUIE式的开发步?/span>
1 wxFormBuilder 的界面设计过E?/span>
q里不再详述Q可以BAIDU下wxPython的界面设计方?/p>
2 界面设计完成后,接下来对界面上的BUTTON事gq行响应
如下图所C,产生响应事g代码
3 事g映射l束后,复制Python 代码到py文g
4 用UliPad~辑Py文g
在py文g末加入app的初始化代码,q在相应的事件中Q加入响应代码即可?/p>
1 class App(wx.App): 2 def OnInit(self): 3 frame = MyFrame1(None) ##q里为我们生成GUI的Framecd 4 frame.Show() 5 return True 6 7 app = App() 8 9 app.MainLoop()
5 q行py文g
W一个wxPython的界面程序到q里完成,有兴可以再q行深入研究?/p>
]]> win32 api : About Messages and Message Queues http://m.tkk7.com/pts/archive/2013/07/26/401985.htmlpts pts Fri, 26 Jul 2013 01:56:00 GMT http://m.tkk7.com/pts/archive/2013/07/26/401985.html http://m.tkk7.com/pts/comments/401985.html http://m.tkk7.com/pts/archive/2013/07/26/401985.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/401985.html http://m.tkk7.com/pts/services/trackbacks/401985.html http://msdn.microsoft.com/en-us/library/windows/desktop/ms644927(v=vs.85).aspx#system_defined 有关win32 api 大全 有关消息的解释,q有一文章解释的非常详细Q?a style="font-size: 14px;">http://blog.csdn.net/mengde666/article/details/4036398
]]>[转]python win32api 使用技?/title> http://m.tkk7.com/pts/archive/2013/07/25/401973.htmlpts pts Thu, 25 Jul 2013 08:40:00 GMT http://m.tkk7.com/pts/archive/2013/07/25/401973.html http://m.tkk7.com/pts/comments/401973.html http://m.tkk7.com/pts/archive/2013/07/25/401973.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/401973.html http://m.tkk7.com/pts/services/trackbacks/401973.html FromQ?a style="font-family: Helvetica, Arial, sans-serif;" >http://www.cnblogs.com/txw1958/archive/2012/02/16/2353491.html前些日子Q由于需要,用python写了个小插gQ通过win32api 讉K外部E序的窗?q且做些操作?/p>
因ؓ原来对win32api 不怎么熟悉 所以只好求救。群里有个QQQ?2034767 唐骁?a style="margin: 0px; padding: 0px; text-decoration: none; color: #000000; border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: #333333;" href="mailto:tsy_007@163.com">tsy_007@163.com
q小伙子不错 心热人善
动手之前要选对好工兗(既然是基于WIN32api 当然要用微Y的专用的spyxx.exeQ上手相当简单。比较专?Q能查出当前桌面上所有的H口句柄和类型。VC的那个绿色版?spy++效果不强QAu3Info.exe也一PQ无法追t多U子H口?下面是简易代码:Q实际上是用钩子原?|络上也可以扑ֈQ?/p>
import win32ui,win32con,pyHook,pythoncomQwin32gui ,wx def hookhandle(event): if event.KeyID==9:#tab键?br style="margin: 0px; padding: 0px;" /> try: pwin=win32gui.FindWindow('AfxMDIFrame70',None)#ȝ?AfxMDIFrame70是你用#spyxx.exe查找到的H口cd pwin1=win32gui.FindWindowEx(pwin,None,'MDIClient',None) pwin2=win32gui.FindWindowEx(pwin1,None,'AfxFrameOrView70',None) pwin3=win32gui.FindWindowEx(pwin2,None,"AfxOleControl70",None) pwin4=win32gui.FindWindowEx(pwin3,None,None,"PatientCardControl Frame")#可以ҎH口#的标题名U查?标题名称一般外接程序是不变?而类名有时是变化?比如机器重启 关闭{?nbsp; pwin5=win32gui.FindWindowEx(pwin4,None,"AfxMDIFrame70",None) pwin6=win32gui.FindWindowEx(pwin5,None,"AfxWnd70",None) pwin7=win32gui.FindWindowEx(pwin6,None,"#32770",None)
textbox=pwin7.GetDlgItem(222)#获取控g的ID textbox2=pwin7.GetDlgItem(224)
buf='0x0'*1024 buf2='0x0'*1024 textbox.SendMessage(win32con.WM_SETTEXT,"")#先清I控件内?br style="margin: 0px; padding: 0px;" /> textbox2.SendMessage(win32con.WM_SETTEXT,"")
oldlen=textbox.SendMessage(win32con.WM_GETTEXT,buf) oldlen2=textbox2.SendMessage(win32con.WM_GETTEXT,buf2)
textbox.SendMessage(win32con.WM_SETTEXT,buf[0:oldlen]+str(blh))#发送消?注意不能##?s 替换 所以一般需要全局变量 来替?br style="margin: 0px; padding: 0px;" /> textbox2.SendMessage(win32con.WM_SETTEXT,buf2[0:oldlen]+str(name)) except: wx.LogMessage('没有发现可用的窗口!L保程序已l运?)
hm = pyHook.HookManager()#初始实例 hm.KeyDown=hookhandle hm.HookKeyboard() pythoncom.PumpMessages(5000)#据说是winctype的新功能 延迟?具体什么也不清?nbsp; hm.UnhookKeyboard()#释放键盘捕捉 好像效果不明?br style="margin: 0px; padding: 0px;" /> #for i in range (0,40): #win32api.Sleep(20) #if win32ui.PumpWaitingMessages(0,-1): win32api.PostQuitMessage(0)# 退出监控消?很关?必须配合sys.setrecursionlimit(4000)使用效果##才明?不然的话 E序无法退出?br style="margin: 0px; padding: 0px;" /> #raise exceptions.SystemExit
def OnClose(self, event): sys.setrecursionlimit(4000)#相当关键 self.Close(True) self.Destroy()
]]> 问题QPAMIE TypeError: getElementsByTagName() takes exactly 1 positional argument (2 given) http://m.tkk7.com/pts/archive/2013/07/08/401323.htmlpts pts Mon, 08 Jul 2013 08:21:00 GMT http://m.tkk7.com/pts/archive/2013/07/08/401323.html http://m.tkk7.com/pts/comments/401323.html http://m.tkk7.com/pts/archive/2013/07/08/401323.html#Feedback 1 http://m.tkk7.com/pts/comments/commentRss/401323.html http://m.tkk7.com/pts/services/trackbacks/401323.html 分类Q?nbsp;其他 python 2013-04-22 17:25 105人阅?/span> 收藏 举报 问题QPAMIE TypeError: getElementsByTagName() takes exactly 1 positional argument (2 given)
解决办法QIE 工具-》兼Ҏ视图设|?》在兼容性视图中讉K所有网?/p>
]]>【{】去?Sqlite3 数据库中的前后回车换行符(newline) http://m.tkk7.com/pts/archive/2013/06/10/400470.htmlpts pts Mon, 10 Jun 2013 12:30:00 GMT http://m.tkk7.com/pts/archive/2013/06/10/400470.html http://m.tkk7.com/pts/comments/400470.html http://m.tkk7.com/pts/archive/2013/06/10/400470.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/400470.html http://m.tkk7.com/pts/services/trackbacks/400470.html 最q?rails 做了一个小的网? 数据库用的是 sqlite3, 数据库数据是从一?xml 文g中导入的, 有很多前导回车和末尾I, 而页面显C的时候会自动把回车替换成 , l果是昄出来的内Ҏ端端的多了很多空? 整个面看v来很?span style="border: 0px; font-size: 12.800000190734863px; margin: 0px; outline: 0px; padding: 0px; text-decoration: line-through;">沌协调. 今天闲下来了军_把这些无用的回R换行W去?
不就是一?trim ? 很快q入 sqlite 命o行界? 输入:
sqlite> update jokes set content=trim(content,’\n’); 搞定, 收工…????? h面一? 我了个去, 不行耶~~, sqlite 不认 \n, 换成 trim(content, ‘\r’), trim(content, ‘\r\n’) ?trim(content, ‘\n\r’) 都不? 哥是个懒? 不想写代码解? 于是 google 了下, 发现有h提供q个解决Ҏ:
x’hh’ should work, where hh are hex digits. So if your file contained hex 0D type line breaks: UPDATE t SET essay_without_newlines = Replace(essay, x’0D’, ‘~’); 也就是说 sqlite 中可以?x’hh’ q种语法来表CZ个字W? 试了?x’0D’, 不行…..再试?x’0A’, 好?
sqlite> update jokes set content=trim(content, x’0A’); 水账一W? 没啥技术含? Ua是做个备? 也希望对别h有所帮助.
http://liang.eu/web-dev/trim-newlines-in-sqlite3
]]>[转]SQLite SQL语法详解 http://m.tkk7.com/pts/archive/2013/06/09/400446.htmlpts pts Sun, 09 Jun 2013 09:05:00 GMT http://m.tkk7.com/pts/archive/2013/06/09/400446.html http://m.tkk7.com/pts/comments/400446.html http://m.tkk7.com/pts/archive/2013/06/09/400446.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/400446.html http://m.tkk7.com/pts/services/trackbacks/400446.html 阅读全文 ]]> [转]在Sqlite中通过Replace来实现插入和更新 http://m.tkk7.com/pts/archive/2013/06/09/400440.htmlpts pts Sun, 09 Jun 2013 07:40:00 GMT http://m.tkk7.com/pts/archive/2013/06/09/400440.html http://m.tkk7.com/pts/comments/400440.html http://m.tkk7.com/pts/archive/2013/06/09/400440.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/400440.html http://m.tkk7.com/pts/services/trackbacks/400440.html 阅读全文 ]]> 【{】python与sqlite中文数据的问?/title> http://m.tkk7.com/pts/archive/2013/06/08/400394.htmlpts pts Sat, 08 Jun 2013 06:04:00 GMT http://m.tkk7.com/pts/archive/2013/06/08/400394.html http://m.tkk7.com/pts/comments/400394.html http://m.tkk7.com/pts/archive/2013/06/08/400394.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/400394.html http://m.tkk7.com/pts/services/trackbacks/400394.html
sqlite默认~码是utf-8,在我们的PYTHON文g中设|文件保存编码及输出默认~码都ؓutf-8
在python安装目录lib/site-packages,下新?sitecustomize.py
输入
import sys
sys.setdefaultencoding('utf-8') #set default encoding to utf-8
pythonq行时自动设|编码ؓutf-8
往sqlite中插入数据然后直接print的时候,需要将数据~码转换为其他编码,比如gbk
使用Ҏ:
def Utf82Gb(self,str):
return str.decode('UTF-8').encode('gbk')
可以轻松解军_sqlite中插入中文数据正显C的问题~
重大提醒Q?/span>
# Never do this -- insecure! symbol = 'RHAT' c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
# Do this instead t = ('RHAT',) c.execute('SELECT * FROM stocks WHERE symbol=?', t)
同时如果涉及C文,是仅有一个字D,也要使用tuple形式
]]> python操作sqlite3 到中文问题 http://m.tkk7.com/pts/archive/2013/06/07/400367.htmlpts pts Fri, 07 Jun 2013 11:01:00 GMT http://m.tkk7.com/pts/archive/2013/06/07/400367.html http://m.tkk7.com/pts/comments/400367.html http://m.tkk7.com/pts/archive/2013/06/07/400367.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/400367.html http://m.tkk7.com/pts/services/trackbacks/400367.html 错问症状Q?/span>
OperationalError: Could not decode to UTF-8 column 'shouji_lanshouyuan' with text '国际2?邬长?
解决ҎQ?/p>
conn = sqlite3.connection(" ... ")
conn.text_factory = str
解决问题Ҏ来源Q?a >http://bbs.csdn.net/topics/250055755
讄python使用什么类型来处理sqlite3的textcdQ默认是unicodeQ所以才会?/span>
OperationalError: Could not decode to UTF-8 column 'name' with text '国内其他'
q个错误
因ؓ从数据库中取出数据时Q是gbk~码Q因Z上次存进ȝ是gbkQ?/span>
conn.text_factory的默认值是unicodeQpython会尝试将textcd的字D{换成unicodeQ就产生了错?/span>
附:sqlite3的row操作Q?/span>
Row对象的详l介l?br style="margin: 0px; padding: 0px;" />
class sqlite3. Row
A Row instance serves as a highly optimized row_factory for Connection objects. It tries to mimic a tuple in most of its features.
It supports mapping access by column name and index, iteration, representation, equality testing and len() .
If two Row objects have exactly the same columns and their members are equal, they compare equal.
Changed in version 2.6: Added iteration and equality (hashability).
keys ( )
This method returns a tuple of column names. Immediately after a query, it is the first member of each tuple in Cursor.description .
New in version 2.6.
下面举例说明
cx.row_factory = sqlite3.Row
c = cx.cursor()
c.execute( ' select * from catalog ' )
< sqlite3.Cursor object at 0x05666680 >
r = c.fetchone()
type(r)
< type ' sqlite3.Row ' >
r
< sqlite3.Row object at 0x05348980 >
print r
(0, 10 , u ' \u9c7c ' , u ' Yu ' )
len(r)
4
r[ 2 ] #使用索引查询
u ' \u9c7c '
r.keys()
[ ' id ' , ' pid ' , ' name ' , ' nickname ' ]
使用列的关键词查?/span>
In [ 43 ]: r[ ' id ' ]
Out[ 43 ]: 0
In [ 44 ]: r[ ' name ' ]
Out[ 44 ]: u ' \u9c7c '
]]> 为pamie增加两个有关获取指定td、tr的函?/title> http://m.tkk7.com/pts/archive/2013/06/07/400351.htmlpts pts Fri, 07 Jun 2013 06:59:00 GMT http://m.tkk7.com/pts/archive/2013/06/07/400351.html http://m.tkk7.com/pts/comments/400351.html http://m.tkk7.com/pts/archive/2013/06/07/400351.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/400351.html http://m.tkk7.com/pts/services/trackbacks/400351.html def getTdOfTableContains(self,table,conText):
#add 20130607 by sho
#find first td in table and td's innertext contains conText
for cell in table.cells:
if conText in cell.innertext:
return cell
return None
def getTrOfTableContains(self,table,conText):
#add 20130607 by sho
#find first tr in table and tr's cells contains conText
td=self.getTdOfTableContains(table,conText)
if td:
return self.getElementParent(td)
else:
return None
试代码Q?/p>
*** q程解释器再初始化了 ***
>>> from PAM30 import PAMIE
>>> ie=PAMIE("http://1.1.1.1/query/itemQueryAction.do?method=jumpToSingleItemTrackQuery")
>>> ie.setTextBox("itemno","1191590659011")
True
>>> ie.submitForm("itemQueryForm")
True
>>> tb4=ie.findElement("table","classname","table4")
>>> tr_sj=ie.getTrOfTableContains(tb4,u"收寄")
>>> print tr_sj.outerhtml
]]> [转]打工是最愚蠢的投?/title> http://m.tkk7.com/pts/archive/2012/09/28/388779.htmlpts pts Fri, 28 Sep 2012 06:30:00 GMT http://m.tkk7.com/pts/archive/2012/09/28/388779.html http://m.tkk7.com/pts/comments/388779.html http://m.tkk7.com/pts/archive/2012/09/28/388779.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/388779.html http://m.tkk7.com/pts/services/trackbacks/388779.html FromQ?a >http://www.ebook99.com/blog/post/2004.html 打工是最愚蠢的投?-------- 很多Z认ؓ打工q不是投资,强烈反对q种观念。其实打工才是最大最愚蠢的投资。h生最宝贵的是什么?除了我们的青春还有什么更宝贵Q很多h都抱怨我IP我没钱想做生意又找不到资金? 多么的可W!其实在你w上有着一座金?无Ş资)Q只是你不敢承认。宁可埋没也不敢利用。宁可委委屈屈地帮h打工Q把你的资双手pl了你的老板。我们试想一下,有谁生下来上天就会送给他一大堆金钱的? 问问李嘉诚吧? 我曾l问q我的一个朋友ؓ什么不L工?他的回答很惊人:“说句得罪点,出去打工直就是愚蠢浪贚w春! Z么你一直是打工仔? 因ؓ你安于现Ӟ 因ؓ你没有勇气,你天生胆怕事不敢另择它\Q所以你是打工仔Q因Z没有勇往直前Q没有超自我的_Q所以,你还是一个打工仔Q你惌了改变你的生z,改变你穷困的命运Q但是你没有做! 因ؓ你不敢做Q你x输Q你x输的一I再IP你最后不敢想Q还是在打工Q所以你q是打工仔!Q!你努力了Q你拼搏了,你抱着雄心大志。结果你没看到预想的成就Q你攑ּ了!你只q是一个打工仔Q!Z么你一直是打工仔? 因ؓ你随波逐流Q近墨者黑Q不思上q,分钱没得Q死爱闹热,所以你一直是打工仔! 因ؓ你畏惧你父母Q你听信你亲戚,你没有主张,你不敢一个h做决定。所以,你只不过q是一直是一个打工仔Q? 你观念传l,只想打工赚点q婚生子,然后生病老死Q走你父母一模一L路,所以你一直是打工仔!你天生脆弱、脑{迟钝只惛_按班部的工作,你想做无本的生意Q你惛_在家里等天上掉陷|所以你一直是一个打工仔Q你抱怨没有机遇,机遇来到你n边的时候你又抓不住Q? 因ؓ你不会抓Q所以你q是一直是打工仔!因ؓ你的贫穷Q所以你自卑Q你退~了Q你什么都不敢做!你只会给别h打工Q所以你一直是打工仔!你没有特别技能,你只有蛮力Q你和你父母一P恶性@环,所以,你一直永q的一个一直在打工的打工仔Q 很多人想把握ZQ要做一件事情时Q但往往l自己找了很多理p自己一直处于矛盾之中,不断费旉Q虚度时光? 1、我没有口才 错:有没有h天生׃说话Q台上的演讲大师也不是一下子p出口成章Q骂人的时候很擅长Q抱怨的时候也很擅长,q也是口才,只是没有M营养|了Q那是没有h值的口才Q看别h争论的时候,自己满嘴评头Q却不反省自己,倘若你做得好Q你今天是否q说自己没口才? 2、我没有?br />错:不是没有钱,而是没有赚钱的脑袋,工作几年了没有钱么,有了Q但是花掉了Q花在没有回报的事情上面Q吃喝玩乐,或存放贬gQ没有实现最大化Q所以钱p样入不敷出,q样月光光这栯生活所需全部一一使用Q这样周而复始,每月做个月光族,没有q虑Q当一天和敲一天钟Q得q且q? 3、我没有能力 错:不给自己Z去锻|又有谁一出生有跑的能力?跳的能力Q一毕业是C会_英?一创业马上成?当别人很努力的学习,很努力的U篏Q努力的找方法,而他每天做了很一点就觉得乏味Q学了一些就觉得没意思,看了一些就不想看,跟自p别h说没兴趣学,然后半辈子过去,一事无成,然后牢骚上天不给Z。能力是努力修来的,不努力想有能力,天才都会成蠢材,但努力,再笨的h也能成精英? 4、我没有旉错:旉很多Q但费的也很多Q别人很充实Q他在看电视Q别人在努力学习Ӟ他在游戏消遣虚度QM旉是觉得很多余,他过得越来越无聊Q别׃慕别hQ但不去学别人好好把握时间创造h|整天不学无术? 5、我没有心情 错:心情好的时候去游玩Q心情不好的时候在家喝闷酒Q心情好的时候去逛街Q心情不好的时候玩游戏Q心情好的时候去享受Q心情不好的时候就睡大觉,好坏心情都一P反正是不做正事? 6、我没有兴趣 错:兴趣是什么,吃喝玩乐谁都有,没有成就哪里来的兴Q出L游回来月光族Q出去K歌回头钱包空I,出去大量购物回来惨兮兮。打工有没有兴趣Q挤公R有没有兴?上班{ֈ下班打卡有没有兴?安急需要一大笔q时候借钱有没有兴?要还钱没p有没有兴?卖老鼠药的人对老鼠药有没有兴趣……Q? 7、我没有考虑 错:考虑做吧Q有可能成了!不做吧,好不甘心Q整天上班也没有个头Q还是做吧,明天开始,不过q是了Q再xQ这钱挣的也不容易,不不Q就是打工挣׃不容易,所以不能放弃机会,军_了,把握Z。哎呀Q天都黑了,明天再说吧!然后W二天又因ؓ以上123456点,因ؓ左思右惻Il箋循环Q最l不能决定,犹犹豫UQ还是一无所莗? 有句话是Q可怜之人必有可恨之处!q一生中不是没有机遇Q而是没有争取与把握,借口太多Q理由太?#8230;…Q争取之人必竭力争取Q一分钱都没有也千方百计惛_法,不争取之人给一百万也动不v来,发胦不了Q还有可能一败涂圎ͼq就是行动上的欠~,喜欢犹U不决Q喜Ƣ拖Ӟ喜欢半途而废Q最后一辈子q_Q庸无为!q有的hQ做事三分钟热度Q一开始热情高涨,{会ql懒散,q种人成功的帽子也不会在你的头上? 看看Z么别n价几个亿Q你自己q在为钱奔LQ不要M慕别人命好,别h很困隄时候是怎么坚挺q来的,怎么克服困难、突破自己、改变命q的Q你没看到Ş了。活着是要一wh? ]]> pamie 中getElementsList对中文内容的处理 http://m.tkk7.com/pts/archive/2012/08/29/386543.htmlpts pts Wed, 29 Aug 2012 13:48:00 GMT http://m.tkk7.com/pts/archive/2012/08/29/386543.html http://m.tkk7.com/pts/comments/386543.html http://m.tkk7.com/pts/archive/2012/08/29/386543.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/386543.html http://m.tkk7.com/pts/services/trackbacks/386543.html pamie 中getElementsListҎ对于查找tag的innertext属性是中文是会出错Q需要修改pamie30文g的第959行,增加l出的属性是中文时的判断方式Q不需要str(valText)Ҏ验: if not isinstance(valText): valText = str(valText) 如此以来Q比如查找innertext?#8220;中文”的td listӞ可用如下方法: 1、val=u"中文" 2、td_list=ie.getElementsList("td","innertext="+val) ]]>
pamie 中对|页中有<br>的处?/title> http://m.tkk7.com/pts/archive/2012/08/27/386386.htmlpts pts Mon, 27 Aug 2012 14:56:00 GMT http://m.tkk7.com/pts/archive/2012/08/27/386386.html http://m.tkk7.com/pts/comments/386386.html http://m.tkk7.com/pts/archive/2012/08/27/386386.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/386386.html http://m.tkk7.com/pts/services/trackbacks/386386.html <td>2012-3-8<br>12:10:00</td> 使用td.innertext获得的是2012-3-8\r\n12:10:00 因此要替换必M用replace("\r\n","替换的新内容")Q简单用\n不行Q!Q费了我2个小时才发现?br />因ؓ使用innertext属性后Q?lt;br>直接转换为\r\nQ而不是\n ]]> 【{】JavaScript Table、TableRow、TableCell属性、方法、事?/title> http://m.tkk7.com/pts/archive/2012/01/06/368032.htmlpts pts Fri, 06 Jan 2012 11:19:00 GMT http://m.tkk7.com/pts/archive/2012/01/06/368032.html http://m.tkk7.com/pts/comments/368032.html http://m.tkk7.com/pts/archive/2012/01/06/368032.html#Feedback 0 http://m.tkk7.com/pts/comments/commentRss/368032.html http://m.tkk7.com/pts/services/trackbacks/368032.html
JavaScript Table、TableRow、TableCell属性、方法、事?/h2>
Table表格对象 Table对象:表示HTML文档中的表,对于文档中每?lt;table>标记Q浏览器都创Z个Table对象.
Table对象集合
集合
描述
cells[]
获取包含表格中所有单元格的数l?/td>
rows[]
获取包含表格中所有行的数l?/td>
tBodies[]
获取包含表格中所有tbody的数l?/td>
Table对象属?/td>
border
讄或获取表D?/td>
caption
讄或获取表格标?/td>
cellPadding
讄或获取每个单元格Ҏ与内容的宽度
cellSpacing
讄或获取表g单元格的间距
frame
讄或获取表格具有哪些边?/td>
rules
讄或获取表g的内部边?/td>
summary
讄或获取表格的描述
tFoot
获取表格的tFoot对象
tHead
获取表格的tHead对象
width
讄或获取表格宽?/td>
Table对象Ҏ
createCaption()
格创Z个空的标题元?/td>
createTFoot()
格创Z个空的tFoot元素
createTHead()
格创Z个空的tHead元素
deleteCaption()
删除表格的标题元?/td>
deleteRow()
删除指定的表D
deleteTFoot()
删除表格的tFoot元素
deleteTHead()
删除表格的tHead元素
insertRow()
向表g插入新行
TableCell对象:表示HTML文档中表的单元格Q对于文档中每个<td>标记Q浏览器都创Z个TableCell对象.
TableCell对象属?/td>
属?/td>
描述
abbr
讄或获取单元格的摘?/td>
align
讄或获取单元格中文字的水^寚w方向
axis
讄或获取以逗号分隔的相兛_元格l成的列?/td>
cellIndex
获取行单元格集合中某单元格的位置
ch
讄或获取单元格的对齐特?/td>
chOff
讄或获取单元格的对齐偏Uȝ?/td>
colSpan
讄或获取单元格跨越的表格列?/td>
headers
讄或获取以I格分表头单元格的id列表
height
讄或获取单元格的高?/td>
innerHTML
讄或获取单元格标记间的HTML文本
noWrap
讄或获取单元格是否自动换行
rowSpan
讄或获取单元格跨越的表D?/td>
scope
讄或获取与标题相关联的数据?/td>
vAlign
讄或获取单元格文字的垂直对齐方?/td>
width
讄或获取单元格的宽?/td>
TableRow对象:表示HTML文档中表的行Q对于文档中每个<tr>标记Q浏览器都创Z个TableRow对象.
TableRow对象集合
集合
描述
cells[]
获取表格行中所有列l成的数l?/td>
Table对象属?/td>
accessKey
讄或获取该对象的快捷键
align
讄或获取表D中单元格中文字的水^寚w方向
chOff
讄或获取单元格的对齐偏Uȝ?/td>
colSpan
讄或获取单元格跨越的表格列?/td>
height
讄或获取表D的高?/td>
innerHTML
讄或获取表D标记间的HTML文本
innerText
讄或获取表D标记间的文本
rowIndex
获取表格行对象在表格行集合中的位|?/td>
sectionRowIndex
获取tBodyQtHead或tFoot中,表格行对象在行集合中的位|?/td>
tabIndex
讄或获取表D的Tab序索引
vAlign
讄或获取表D中文字的垂直寚w方向
width
讄或获取表D的宽?/td>
TableRow对象Ҏ
blur()
取消该对象的Ȁzȝ?/td>
click()
模拟鼠标单击该对?/td>
deleteCell([i])
删除表格行中的指定的单元?/td>
focus()
焦点移臌D
insertCell()
在表D中插入新单元?/td>
信息来源Qhttp://www.efamilly.com (举报q篇文章) ]]>
վ֩ģ壺
ŷƷ˾þԻӰƬ |
˳www |
aëƬѲȫ |
Ѽһ |
57PAO˹Ƶ
|
ձƷɫӰԺ |
ƷҹѸ
|
þþžѾƷ6 |
һվƵ |
һĻ |
߹ۿɫƬƵ
|
99ֻоƷƵѿ |
պƬӰ |
ƷSSS߹ۿAV |
뿴һëƬѵ |
ѹۿþþƵ |
AVŮ18ëƬˮ |
Ӱһ |
xvideosַ |
freežž |
ѿƬ |
һ֮ |
һƷ߲ |
avվѹۿ |
99reƵ |
sssձ߹ۿ |
Ļ |
ŷղavϵ
|
þþþƷѹĻ |
337pձŷ |
91Ӱ |
Ʒ |
ƵƷ |
ƷһʽӰ
|
ƷƷ벻 |
999ƵƷѲŹۿ |
ɫѹۿ |
ƵѹۿƵ |
Ļһȥ̨
|
鶹˴ýѹۿ |
鶹91Ƶ |