0

我正在循环一个 json 行文件,我只是过滤发件人 ID 和状态并将其输出到终端。列表中有多个发件人 ID,而发件人只是一个字符串。我希望能够将输出写入一个 csv 文件,其中第一列为 STATUS,第二列为 SENDER_ID。我在我的脚本顶部尝试过这个,但不确定这是否是正确的做法。

我的脚本如下。此时我需要将其写入 csv。我已经阅读了文档,但仍然有点不确定。

import json_lines

text_file = open("senderv1.csv", "a")
with open('specifications.jsonl', 'rb') as f:
for item in json_lines.reader(f):
4

2 回答 2

0

使用 pandas,您可以创建数据框,从而将其保存为 csv。希望这能解决您的问题。

import json_lines 
import pandas as pd 
# text_file = open("senderv1.csv", "a") 

single_sender_status=[] 
single_sender=[] 
with open('specifications.jsonl', 'rb') as f: 
    for item in json_lines.reader(f): 
        if 'sender_id' in item: 
            single_sender_status.append(item['status']) 
            single_sender.append(item['sender_id']) 
            # text_file.write(single_sender_status) 
            # text_file.write('\t') 
            # text_file.write(single_sender) 
            # text_file.write('\n') 
            # print("Single ID " + str(single_sender)) 
        else: 
            single_sender_status.append(item['status']) 
            single_sender.append([sender['id'] for sender in item['senders']]) 
            # text_file.write(single_sender_status) 
            # text_file.write('\t') 
            # text_file.write(multiple_sender_ids) 
        # print("Multiple Sender ID'S " + str(multiple_sender_ids)) 

df=pd.DataFrame({'STATUS':single_sender_status,'SENDER_ID':single_sender}) 

df.to_csv('senderv1.csv',index=False)
于 2019-08-28T13:20:03.767 回答
0

csv这是使用标准库中的模块编写 CSV 文件的代码。如果第一列包含状态,以下列为发件人:

#!/usr/bin/env python3
import csv

import json_lines


def main():
    with json_lines.open("specifications.jsonl") as reader:
        with open("senderv1.csv", "w", encoding="utf8") as csv_file:
            writer = csv.writer(csv_file, delimiter="\t")
            for item in reader:
                row = [item["status"]]
                if "sender_id" in item:
                    row.append(item["sender_id"])
                elif "senders" in item:
                    row.extend(sender["id"] for sender in item["senders"])
                else:
                    raise ValueError("item with no sender information")
                writer.writerow(row)


if __name__ == "__main__":
    main()

将相同的信息分布在不同的列中并不是很好,但是将多个值放入单个单元格也不是很好。CSV 最适合二维表格数据。也许你也想要 JSON (Lines) 作为结果‽</p>

于 2019-08-28T13:56:05.463 回答