免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5719 | 回复: 7
打印 上一主题 下一主题

python printjson显示格式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-09-01 11:28 |只看该作者 |倒序浏览
本帖最后由 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"
}

有的行为什么会分几行显示呢,有没有办法结果都显示在一行,而不是有的行分开显示

或者谁可以告诉我把这些数据拆分成一个列表,元素为字典{}上面的类容一起放在一个字符串里面

论坛徽章:
0
2 [报告]
发表于 2014-09-01 15:46 |只看该作者
  1. import json
  2. rows = db.BagVo.find({},{roleId:1,packOpenLattice:1,houseOpenLattice:1,_id:0}).forEach(printjson)
  3. data = []
  4. for row in rows:
  5.     dataDict = {}
  6.     jsonData = json.loads(row)
  7.     houseOpenLattice = jsonData['houseOpenLattice']
  8.     packOpenLattice = jsonData['packOpenLattice']
  9.     roleId = jsonData['roleId"']
  10.     dataDict['houseOpenLattice'], dataDict['packOpenLattice'], dataDict['roleId'] = houseOpenLattice, packOpenLattice, roleId
  11.     data.append(dataDict)
复制代码
这样就可以放到一个列表了了吧?

论坛徽章:
0
3 [报告]
发表于 2014-09-01 15:56 |只看该作者
回复 2# huangxiaohen


    谢谢楼上这位朋友,我已经搞定了,用的是笨办法,利用中括号的位置一个一个取出来
  1. result_data=result.read().replace('\n','').replace('\t','')
  2. count=result_data.count('{')
  3.             cs_start=0
  4.             cs_end=0
  5.             num=0
  6.             for i in range(count):
  7.                 i=result_data.index('{',cs_start+1)
  8.                 if i != cs_start:
  9.                     cs_start=i
  10.                
  11.                 i=result_data.index('}',cs_end+1)
  12.                 if i != cs_end:
  13.                     cs_end=i
  14.                     data=eval(result_data[cs_start:cs_end+1])
  15.                     data['sername']=sername
  16.                     self.result_dic.append(data)
复制代码

论坛徽章:
0
4 [报告]
发表于 2014-09-01 15:58 |只看该作者
额,从mongo里查出来的,处理下json就可以了,不用那么麻烦。

论坛徽章:
0
5 [报告]
发表于 2014-09-01 17:13 |只看该作者
本帖最后由 hucuibai 于 2014-09-01 17:31 编辑

回复 4# huangxiaohen


    用我那个还是不行,数据小的时候可以,多了之后就报错,还有那个pyExcelerator写excel行数是不是有限制,内容多就写不了了最长65535么?
我是直接用mongo.exe执行的脚本,
  1. import os,subprocess
  2. import json

  3. class result_query():
  4.         
  5.     def run(self,host,f_name):
  6.         try:
  7.             user='admin'
  8.             password='newbie'
  9.             self.cmd='mongo -u%s -p%s %s:27017/admin <%s'%(user,password,host,f_name)
  10.             p= subprocess.Popen(self.cmd,stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True)
  11.             self.error=p.stderr
  12.             return p.stdout
  13.         except Exception,e:
  14.             print 'test:'+str(e)
  15.     def geterror(self):
  16.         return self.error



  17. app=result_query()
  18. 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[used_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[cs_start:cs_end+1])
  File "<string>", line 1, in <module>
NameError: name 'whatsmyuri' is not defined

论坛徽章:
0
6 [报告]
发表于 2014-09-01 17:31 |只看该作者
pymongo或者mongoine都差不多其实,你不用管查出来是什么样的,反正是bson格式的,就用json去解析,然后加到列表里,python有操作excel的库,直接将列表导入到excel里就可以了.

论坛徽章:
0
7 [报告]
发表于 2014-09-01 17:48 |只看该作者
回复 6# huangxiaohen


    我现在就是想不用pymongo而用mongo.exe直接执行脚本,运行的是os.Popen执行的mongo.exe的命令,stdout的出来的是字符串,用pymongo是可以没有问题的,现在问题就是用mongo.exe执行脚本的出来的结果 我怎么把数据取出来放到列表里面,pymongo查询是可以,但是group分组和update更新的话有点麻烦,我就是想做一个数据库管理工具,我是做游戏数据库管理的,所以想做一个批量管理数据库的,pymongo的我做了一个版本  ,没有问题

论坛徽章:
0
8 [报告]
发表于 2014-09-01 18:07 |只看该作者
我记得是可以改变stdout的类型的,就是将原本输出终端的内容输出到文本里,查询出的内容页是一条一条的,所以你写到文本里肯定是一行一行的.好像是叫msvcrt.setmode一个方法,你查一下吧.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP