资讯专栏INFORMATION COLUMN

mongodb: “invalid character ',' looking

Faremax / 4087人阅读

摘要:我以为是编码的问题,可能是下的编码有问题,因为有一个谈论这个问题的。其中遇到了也是的问题提到的这个做法很不错,使用这个参数确定位置。

从群里获取了一个超大的json(也就800M),需要导入mongodb,然后遇到了一个问题:

</>复制代码

  1. $ mongoimport --db weibo --collection data --file test.json
  2. 2018-05-09T16:10:22.357+0800 connected to: localhost
  3. 2018-05-09T16:10:22.360+0800 Failed: error processing document #2: invalid character "," looking for beginning of value
  4. 2018-05-09T16:10:22.360+0800 imported 0 documents
first

一开始,我先去 菜鸟工具1验证了一下我的json格式不是不是正确,json格式是没有没问题的。

second

我以为是编码的问题,可能是mac下的编码有问题,因为stackoverflow2有一个谈论这个问题的。上边的回复说是有UTF8不支持的字符,但是他们遇到的问题都是,我还是去Windows服务器上装上了mongodb,然后还是这个问题,可见我这个可能不是字符问题。
其中JP Lew遇到了也是,的问题提到的这个做法很不错,使用-vvvv这个参数确定位置。

</>复制代码

  1. $ mongoimport --db weibo --collection data --file test.json -vvvvv
  2. 2018-05-09T16:30:09.538+0800 using 4 decoding workers
  3. 2018-05-09T16:30:09.539+0800 using 1 insert workers
  4. 2018-05-09T16:30:09.539+0800 will listen for SIGTERM, SIGINT, and SIGKILL
  5. 2018-05-09T16:30:09.542+0800 filesize: 823127226 bytes
  6. 2018-05-09T16:30:09.542+0800 using fields:
  7. 2018-05-09T16:30:09.552+0800 connected to: localhost
  8. 2018-05-09T16:30:09.552+0800 ns: weibo.data
  9. 2018-05-09T16:30:09.552+0800 connected to node type: standalone
  10. 2018-05-09T16:30:09.553+0800 standalone server: setting write concern w to 1
  11. 2018-05-09T16:30:09.553+0800 using write concern: w="1", j=false, fsync=false, wtimeout=0
  12. 2018-05-09T16:30:09.553+0800 standalone server: setting write concern w to 1
  13. 2018-05-09T16:30:09.553+0800 using write concern: w="1", j=false, fsync=false, wtimeout=0
  14. 2018-05-09T16:30:09.555+0800 Failed: error processing document #2: invalid character "," looking for beginning of value
  15. 2018-05-09T16:30:09.555+0800 imported 0 documents

嗯,还是这个问题,所以我这个问题应该跟JP的那个也不一样。而且我这个应该是第一个json就出问题了!

插曲

因为文件里好多东西都没用,所以我想只把有用的那几行挑出来,但是结果感人,还是想个正经办法把。
附上 cat+grep提取个别行3

</>复制代码

  1. [root@localhost test]# cat test.txt
  2. hnlinux
  3. peida.cnblogs.com
  4. ubuntu
  5. ubuntu linux
  6. redhat
  7. Redhat
  8. linuxmint
  9. [root@localhost test]# cat test2.txt
  10. linux
  11. Redhat
  12. [root@localhost test]# cat test.txt | grep -f test2.txt
  13. hnlinux
  14. ubuntu linux
  15. Redhat
  16. linuxmint
third

最后,在我一次又一次的实验下,终于找到了问题:

</>复制代码

  1. {
  2. ...
  3. },
  4. {
  5. ...
  6. },
  7. ...

泥煤两个json中间多了一个逗号啊,然后写了一个脚本把这个逗号去掉吧。。。

</>复制代码

  1. import os
  2. import re
  3. import sys
  4. args = sys.argv
  5. if len(args) != 3 or args[1] == args[2]:
  6. raise Warning()
  7. abs_path = os.path.abspath(".")
  8. org_path = os.path.join(abs_path, args[1])
  9. new_path = os.path.join(abs_path, args[2])
  10. re_com = re.compile(r"^},")
  11. try:
  12. fr = open(org_path, "r")
  13. fw = open(new_path, "w")
  14. for line in fr:
  15. if re_com.match(line):
  16. line = "}
  17. "
  18. fw.writelines(line)
  19. except IOError as e:
  20. print(e)
  21. finally:
  22. if fr:
  23. fr.close()
  24. if fw:
  25. fw.close()

这么pythonic的处理大文件的方式来自:https://www.cnblogs.com/wulaa... :

</>复制代码

  1. with open(filename, "r") as file:
  2. for line in file:
  3. ....

ok,把新文件导入进去~

</>复制代码

  1. $ mongoimport --db weibo --collection data --file new.json
  2. 2018-05-09T15:58:36.211+0800 connected to: localhost
  3. 2018-05-09T15:58:39.194+0800 [##......................] weibo.data77.5MB/785MB (9.9%)
  4. 2018-05-09T15:58:42.195+0800 [####....................] weibo.data160MB/785MB (20.4%)
  5. 2018-05-09T15:58:45.195+0800 [#######.................] weibo.data243MB/785MB (31.0%)
  6. 2018-05-09T15:58:48.203+0800 [#########...............] weibo.data323MB/785MB (41.1%)
  7. 2018-05-09T15:58:51.197+0800 [############............] weibo.data402MB/785MB (51.2%)
  8. 2018-05-09T15:58:54.195+0800 [##############..........] weibo.data478MB/785MB (60.9%)
  9. 2018-05-09T15:58:57.196+0800 [#################.......] weibo.data560MB/785MB (71.4%)
  10. 2018-05-09T15:59:00.195+0800 [###################.....] weibo.data642MB/785MB (81.8%)
  11. 2018-05-09T15:59:03.196+0800 [######################..] weibo.data722MB/785MB (92.0%)
  12. 2018-05-09T15:59:05.521+0800 [########################] weibo.data785MB/785MB (100.0%)
  13. 2018-05-09T15:59:05.522+0800 imported 95208 documents

Bingo!


</>复制代码

  1. 这里有两篇讨论这个问题的,我没来得及看,留给有需要的人(好吧,主要是看着太吃力了):

  2. https://stackoverflow.com/que...

  3. https://groups.google.com/for...


  • https://c.runoob.com/front-en... ↩

  • https://stackoverflow.com/que... ↩

  • http://www.cnblogs.com/peida/... ↩

  • 文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

    转载请注明本文地址:https://www.ucloud.cn/yun/19250.html

    相关文章

    • mongodb: “invalid character &#039;,&#039; looking

      摘要:我以为是编码的问题,可能是下的编码有问题,因为有一个谈论这个问题的。其中遇到了也是的问题提到的这个做法很不错,使用这个参数确定位置。 从群里获取了一个超大的json(也就800M),需要导入mongodb,然后遇到了一个问题: $ mongoimport --db weibo --collection data --file test.json 2018-05-09T16:10:22....

      Edison 评论0 收藏0
    • 聊聊MongoDB - MongoDB的简单安装

      摘要:安装全过程环境基本情况我是在电脑下安装的系统位,这个也是导致我安装的时候出现异常提示,原因可能是的版本是位的,我应该再找一个位的,但事实上我找不到。 简述 之前讲了一些关于MongoDB的知识,出人意料的受欢迎,也让我很吃惊,所以今天打算分享一些我在自己计算机的虚拟机的centos系统下安装MongoDB的经历,希望感兴趣的你们在安装MongoDB的时候出现问题可以来看看我是怎么安装的...

      notebin 评论0 收藏0
    • 聊聊MongoDB - MongoDB的简单安装

      摘要:安装全过程环境基本情况我是在电脑下安装的系统位,这个也是导致我安装的时候出现异常提示,原因可能是的版本是位的,我应该再找一个位的,但事实上我找不到。 简述 之前讲了一些关于MongoDB的知识,出人意料的受欢迎,也让我很吃惊,所以今天打算分享一些我在自己计算机的虚拟机的centos系统下安装MongoDB的经历,希望感兴趣的你们在安装MongoDB的时候出现问题可以来看看我是怎么安装的...

      whatsns 评论0 收藏0

    发表评论

    0条评论

    Faremax

    |高级讲师

    TA的文章

    阅读更多
    最新活动
    阅读需要支付1元查看
    <