首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中的json文件开头跳过文本

如何在python中的json文件开头跳过文本
EN

Stack Overflow用户
提问于 2019-08-12 21:41:50
回答 2查看 4.7K关注 0票数 1

我有一个json对象文件,在这个文件的开头是一个文本、日期、时间、IP地址的头。

我已经尝试过f.readlines()5:没有结果。我已经尝试了下一步(F)

我希望跳过5或6行文本,直接进入json数据。

下面是一个例子。

代码语言:javascript
复制
import jsonlines
import json

data_file = input("Enter a file to parse: ")
with jsonlines.open(data_file) as file:
    for obj in file:
        try:
            jsonparse = json.loads(obj)
        except Exception as e:
            pass
        print(obj)

错误:

代码语言:javascript
复制
jsonlines.jsonlines.InvalidLineError: line contains invalid json: Expecting value: line 1 column 1 (char 0) (line 1)

json文件顶部: Start: 07/02/2019 14:59:40.686

连接: 192.168.11.203

以下是完整的长错误:

代码语言:javascript
复制
Enter a file to parse: Play.raw
Traceback (most recent call last):
  File "C:\Users\sdickey\AppData\Local\Programs\Python\Python37\lib\site-packages\jsonlines\jsonlines.py", line 159, in read
    value = self._loads(line)
  File "C:\Users\sdickey\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "C:\Users\sdickey\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\sdickey\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:/Users/sdickey/PycharmProjects/Python Testing/Actall Data/testing.py", line 6, in <module>
    for obj in file:
  File "C:\Users\sdickey\AppData\Local\Programs\Python\Python37\lib\site-packages\jsonlines\jsonlines.py", line 204, in iter
    skip_empty=skip_empty)
  File "C:\Users\sdickey\AppData\Local\Programs\Python\Python37\lib\site-packages\jsonlines\jsonlines.py", line 164, in read
    six.raise_from(exc, orig_exc)
  File "<string>", line 3, in raise_from
jsonlines.jsonlines.InvalidLineError: line contains invalid json: Expecting value: line 1 column 1 (char 0) (line 1)

Process finished with exit code 1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-13 14:39:28

最好不要在内存中读取整个文件,而是一次读取一行文件。

假设输入文件包含:

代码语言:javascript
复制
first line
second line
third line
fourth line
fifth line
{ "k1": "val1", "k2": "val2" }
{ "k3": "val3", "k4": "val4" }

如果您只想跳过5行,您可以残忍地这样做:

代码语言:javascript
复制
import json

with open("test.txt") as f:
    for _ in range(5):
        next(f)
    for line in f:
        obj = json.loads(line)
        print(obj)

或使用枚举:

代码语言:javascript
复制
import json

with open("test.txt") as f:
    for i, line in enumerate(f):
        if i<5:
            continue
        obj = json.loads(line)
        print(obj)

或者使用itertools的下拉列表,同时:

代码语言:javascript
复制
import itertools as it
import json

with open("test.txt") as f:
    for i, line in it.dropwhile(lambda i: i[0]<5, enumerate(f)):
        obj = json.loads(line)
        print(obj)
票数 1
EN

Stack Overflow用户

发布于 2019-08-13 08:05:22

我想你是想逐行转换成json。您需要通过\n将前5行添加到所有行中,然后加载它:

代码语言:javascript
复制
import json
with open("test.txt") as f:
  json_obj = "\n".join(f.readlines()[5:])
  jsonparse = json.loads(json_obj)
  print(jsonparse)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57468600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档