处理json格式的数据

如何处理json格式的数据

1. 主要处理三类数据

  • 带有json格式的数据
    • 形式:[{key:value}]
    • 提取:文字、图片链接、文档链接
[{"content":"点击“产品开发库”,右上角“展开筛选”,按条件筛选流程信息。","type":"text"},{"content":"\n","type":"text"},{"height":0,"key":"img_v3_02cu_1899636b-dfc3-43df-97fe-80ccc774c32g","src":"图片链接","type":"img","width":1313},{"content":"\n","type":"text"},{"content":"\n","type":"text"}]
  • 纯字符串
    • 第一种需要提取出来“”之间的内容
    • 第二种需要提取单行的内容
数据一:
"1、查看当前审批人:可在正式数据发放/过程数据发放中,当前审批人员列中查看当前审批人。如已审批完则不显示审批人。
 2、单据状态:在状态列,第1个小图标表示单据的流程状态(鼠标悬停可显示),第2个小图标表示数据状态(鼠标悬停可显示)"

数据二:
计划完成时间前提交任务就不算超期

代码:

import re
import json
import pandas as pd

# 示例输入文件路径
input_file_path = 'C:\\Users\\user\\Desktop\\test.txt'

# 处理多行“”中的内容,并把他们合并为一个内容+单行纯文本
def parse_notebook_file(input_file):
    datalist = []
    with open(input_file, 'r', encoding='utf-8') as f:
        for line in f:
            try:
                # 尝试将行解析为JSON
                datalist.append(json.loads(line))
            except json.JSONDecodeError:
                final_text = ""
                if line.startswith('"'):
                    final_text+=line[1:]  #去除第一行的单引号
                    # print(line[1:])
                    # 如果当前行以双引号开始,尝试找到以双引号结束的行
                    for next_line in f:
                        if len(re.findall(r'"', next_line))%2!=1 : #判断“个数是否奇数
                            final_text += next_line
                            # print(final_text)
                        else:
                            final_text += next_line[:len(next_line)-2] #去除最后一行的单引号
                            # print(final_text)
                            datalist.append(final_text)
                            # print(datalist)
                            break
                            # break
                            # 如果找到以双引号结束的行,将这两行之间的内容作为一个文本条目添加到列表中

                else:
                    # 如果解析失败,则将行作为纯文本添加
                    datalist.append(line.strip())
    # for data in datalist:
    #     print(data)
    #     print('---------')

    return datalist

# 处理输入文件并生成datalist
datalist = parse_notebook_file(input_file_path)

# 提取json字符串中的中文、图片链接、文档链接
def collect_pure_text_and_links(datalist):
    results = []
    for data in datalist:
          # print(data)
          # print('----------------------')
          if isinstance(data, list):  # 检查是否为列表(JSON格式-列表中嵌套字典)
             # print(data)
             content_parts = []
             for item in data:
                # print(item)
                if item["type"] == "text":
                    # 提取中文
                    chinese_text = re.findall(r'[\u4e00-\u9fa5]+', item["content"])
                    # 提取链接
                    links = re.findall(r'https?://[^\s]+', item["content"])
                    # 合并中文和链接
                    combined_content = ' '.join(chinese_text + links)
                    if combined_content:
                        # print(item["content"].replace(combined_content, combined_content.replace(',', ',')))
                        content_parts.append(item["content"].replace(combined_content, combined_content.replace(',', ',')))
                elif item["type"] == "img":
                    # 添加图片链接
                    # print(item["src"])
                    content_parts.append(item["src"])
                elif item["type"] == "hyperlink":
                    # 提取链接和文本
                    content_parts.append(item["text"])
                    # print(item["text"])
                    content_parts.append(item["url"])
                    # print(item["url"])
             results.append(' '.join(content_parts))
             # print('----------------------')
          else:

             results.append(data)
             # print('----------------------')
    for data_r in results:
        print(data_r)
        print('----------------------')

    return results

# 使用新函数处理并收集数据
collected_data = collect_pure_text_and_links(datalist)

# 将收集的数据存储到Excel文件中
output_file_path = 'C:\\Users\\user\\Desktop\\test_output.xlsx' #输出路径,运行程序时,该文件不要打开
df = pd.DataFrame(collected_data, columns=['Content'])
df.to_excel(output_file_path, index=False)

output_file_path

posted @ 2024-07-23 11:51  Trouvaille_fighting  阅读(3)  评论(0编辑  收藏  举报