python printjson显示格式
本帖最后由 hucuibai 于 2014-09-01 15:05 编辑我的查询语句如下:
db.BagVo.find({},{roleId:1,packOpenLattice:1,houseOpenLattice:1,_id:0}).forEach(printjson)
显示结果如下
{ "roleId" : "S1xx308067", "packOpenLattice" : 0, "houseOpenLattice" : 0 }
{ "roleId" : "S1xx308185", "packOpenLattice" : 0, "houseOpenLattice" : 0 }
{
"roleId" : "S1xx15691145",
"packOpenLattice" : 115,
"houseOpenLattice" : 2
}
{ "roleId" : "S1xx07062373", "packOpenLattice" : 0, "houseOpenLattice" : 0 }
{ "roleId" : "S1xx02782681", "packOpenLattice" : 0, "houseOpenLattice" : 0 }
{ "houseOpenLattice" : 2, "packOpenLattice" : 7, "roleId" : "S1xx0613789" }
{ "roleId" : "S1xx12083935", "packOpenLattice" : 2, "houseOpenLattice" : 2 }
{
"houseOpenLattice" : 3,
"packOpenLattice" : 115,
"roleId" : "S1xx14232905"
}
{
"houseOpenLattice" : 115,
"packOpenLattice" : 115,
"roleId" : "S1xx06091855"
}
有的行为什么会分几行显示呢,有没有办法结果都显示在一行,而不是有的行分开显示
或者谁可以告诉我把这些数据拆分成一个列表,元素为字典{}上面的类容一起放在一个字符串里面 import json
rows = db.BagVo.find({},{roleId:1,packOpenLattice:1,houseOpenLattice:1,_id:0}).forEach(printjson)
data = []
for row in rows:
dataDict = {}
jsonData = json.loads(row)
houseOpenLattice = jsonData['houseOpenLattice']
packOpenLattice = jsonData['packOpenLattice']
roleId = jsonData['roleId"']
dataDict['houseOpenLattice'], dataDict['packOpenLattice'], dataDict['roleId'] = houseOpenLattice, packOpenLattice, roleId
data.append(dataDict)这样就可以放到一个列表了了吧? 回复 2# huangxiaohen
谢谢楼上这位朋友,我已经搞定了,用的是笨办法,利用中括号的位置一个一个取出来result_data=result.read().replace('\n','').replace('\t','')
count=result_data.count('{')
cs_start=0
cs_end=0
num=0
for i in range(count):
i=result_data.index('{',cs_start+1)
if i != cs_start:
cs_start=i
i=result_data.index('}',cs_end+1)
if i != cs_end:
cs_end=i
data=eval(result_data)
data['sername']=sername
self.result_dic.append(data) 额,从mongo里查出来的,处理下json就可以了,不用那么麻烦。 本帖最后由 hucuibai 于 2014-09-01 17:31 编辑
回复 4# huangxiaohen
用我那个还是不行,数据小的时候可以,多了之后就报错,还有那个pyExcelerator写excel行数是不是有限制,内容多就写不了了最长65535么?
我是直接用mongo.exe执行的脚本,import os,subprocess
import json
class result_query():
def run(self,host,f_name):
try:
user='admin'
password='newbie'
self.cmd='mongo -u%s -p%s %s:27017/admin <%s'%(user,password,host,f_name)
p= subprocess.Popen(self.cmd,stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True)
self.error=p.stderr
return p.stdout
except Exception,e:
print 'test:'+str(e)
def geterror(self):
return self.error
app=result_query()
result=app.run('172.18.72.65','1.txt')
之前是用pymongo连接的,后面发现pymongo还是不方便更新和分组都比较麻烦,所以想换成直接执行脚本,但是执行脚本的结果是上面给出的那种格式,这个比较蛋疼,结果有的在一行,有的是分成了几行,所以我就想怎么能弄成一行,把这些结果放到list里面然后我再一个一个显示出来,导到excel表格里面,不然数据不好看,麻烦高手看看,我也是个菜鸟,边看边学,经验少,希望不嫌弃指点一下
excel保存报错
Traceback (most recent call last):
File "C:\Users\hucuibai\Desktop\python_script\test\wxpython_lianxi\main\result\result_data.py", line 103, in dao
w.save('test.xls')
File "C:\Python27\lib\site-packages\pyExcelerator\Workbook.py", line 610, in save
doc.save(filename, self.get_biff_data())
File "C:\Python27\lib\site-packages\pyExcelerator\Workbook.py", line 595, in get_biff_data
data = sheet.get_biff_data()
File "C:\Python27\lib\site-packages\pyExcelerator\Worksheet.py", line 1424, in get_biff_data
result += self.__row_blocks_rec()
File "C:\Python27\lib\site-packages\pyExcelerator\Worksheet.py", line 1333, in __row_blocks_rec
result.append(self.__rows].get_row_biff_data())
File "C:\Python27\lib\site-packages\pyExcelerator\Row.py", line 200, in get_row_biff_data
return BIFFRecords.RowRecord(self.__idx, self.__min_col_idx, self.__max_col_idx, height_options, options).get()
File "C:\Python27\lib\site-packages\pyExcelerator\BIFFRecords.py", line 1430, in __init__
options)
struct.error: ushort format requires 0 <= number <= USHRT_MAX
这个应该是限制问题吧,有没有碰到过这种问题的,还有一个就是根据我自己那个方法吧{}里面的内容分出来,但是内容一多就报错
Exception in thread Thread-60:
Traceback (most recent call last):
File "C:\Python27\lib\threading.py", line 551, in __bootstrap_inner
self.run()
File "C:\Python27\lib\threading.py", line 504, in run
self.__target(*self.__args, **self.__kwargs)
File "C:\Users\hucuibai\Desktop\python_script\test\wxpython_lianxi\main\result\result_data.py", line 131, in db_op
data=eval(result_data)
File "<string>", line 1, in <module>
NameError: name 'whatsmyuri' is not defined
pymongo或者mongoine都差不多其实,你不用管查出来是什么样的,反正是bson格式的,就用json去解析,然后加到列表里,python有操作excel的库,直接将列表导入到excel里就可以了. 回复 6# huangxiaohen
我现在就是想不用pymongo而用mongo.exe直接执行脚本,运行的是os.Popen执行的mongo.exe的命令,stdout的出来的是字符串,用pymongo是可以没有问题的,现在问题就是用mongo.exe执行脚本的出来的结果 我怎么把数据取出来放到列表里面,pymongo查询是可以,但是group分组和update更新的话有点麻烦,我就是想做一个数据库管理工具,我是做游戏数据库管理的,所以想做一个批量管理数据库的,pymongo的我做了一个版本,没有问题 我记得是可以改变stdout的类型的,就是将原本输出终端的内容输出到文本里,查询出的内容页是一条一条的,所以你写到文本里肯定是一行一行的.好像是叫msvcrt.setmode一个方法,你查一下吧.
页:
[1]