文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

借助ChatGPT进行数据清洗

2024-11-30 14:32

关注

在很多实际工作情况下,通过python等工具进行内容爬取,爬取的数据到本地后并不可用,需要进行清洗,清洗后导入到mysql数据库进行数据分析。对于少量文件可以删除http头信息后,另存为json文件,通过mysql的一些客户端程序直接导入,但对于成百上千个,甚至超过10万的json文件处理就比较麻烦,本文基于超过数万json文件的批量处理进行探索,数分钟解决了数据清洗。

一、程序功能设计

3-用户列表目录存放burpsuite爬取的数据。

2.爬取数据的格式为json文件

3.爬取的文件带有http头内容,通过记事本等编辑器打开显示头文件内容为15行。

4.需要删除每一个文件中的前15行。

5.对所有目录下的文件命名为txt文件,处理完毕后命名为json文件。

6.依次读取所有json文件,通过逗号分隔列名,保存为out.txt文件。

7.程序处理出错,继续运行,且保存出错信息。

二、实现编程

这是一个 Python 程序,可以将一个目录中的 JSON 文件转换成 CSV 格式,然后将其写入到一个名为 "3-用户列表.txt" 的文件中,并记录执行过程中的错误信息到 "error.log" 文件中。

程序的主要逻辑如下:

  1. 获取目录中所有的文件(只包括文件),如果没有任何文件,则抛出异常;
  2. 遍历文件,如果文件的后缀不是 ".txt",则重命名文件名字并改变文件名变量的值;
  3. 读取文件内容,将前 15 行保留在一个字符串中,剩余部分作为新内容;
  4. 将新内容写回文件中;
  5. 将文件后缀名从 ".txt" 改为 ".json" 并修改文件名变量的值;
  6. 读取 JSON 文件的内容,并获取其中 "data" 中 "list" 数组中的每个元素的 key 值,这些 key 值作为表格的列名,并将这些列名保存到数组 "columns" 中;
  7. 遍历 "list" 数组中的每个元素,将每一行的值存入一个数组 "row_values" 中,最后将 "row_values" 中的所有值拼接成一个字符串,以逗号为分隔符,将其保存到数组 "rows" 中;
  8. 将 "columns" 和 "rows" 写入到 "3-用户列表.txt" 文件中。如果该文件的大小为0,那么先写入 "columns";否则直接写入 "rows" 内容;
  9. 打印信息表明某个文件的数据被写入了 "out.txt" 文件中。

程序运行过程中出现错误,不会影响程序的整体执行,而是将错误信息记录到 "error.log" 文件中。

三、不断优化

优化内容:

  1. 增加了try-except语句,用于处理可能出现的异常情况;
  2. 增加了对目录下是否存在任何文件的判断,防止在空目录中运行程序;
  3. 增加了错误提示,如果程序出错会显示错误信息;
  4. 代码整体结构并没有变化,只是在原有的代码基础上增加了一些出错处理的逻辑。
import os
import json


dir = '3-用户列表'


try:
    all_files = [f for f in os.listdir(dir) if os.path.isfile(os.path.join(dir, f))]
    if not all_files:
        raise Exception('该目录下不存在任何文件')


    with open('error.log', 'a+', encoding='utf-8') as error_file:
        for file in all_files:
            try:
                if not file.endswith('.txt'):
                    os.rename(os.path.join(dir, file), os.path.join(dir, os.path.splitext(file)[0] + '.txt'))
                    file = os.path.splitext(file)[0] + '.txt'


                with open(os.path.join(dir, file), 'r', encoding='utf-8') as txt_file:
                    content = txt_file.readlines()


                deleted_content = '\n'.join(content[:15])
                new_content = ''.join(content[15:])
                with open(os.path.join(dir, file), 'w', encoding='utf-8') as txt_file:
                    txt_file.write(new_content)


                json_file = os.path.splitext(file)[0] + '.json'
                os.rename(os.path.join(dir, file), os.path.join(dir, json_file))


                with open(os.path.join(dir, json_file), 'r', encoding='utf-8') as j_file:
                    data = json.load(j_file)
                    columns = list(data['data']['list'][0].keys())
                    rows = []


                    for item in data['data']['list']:
                        row_values = []
                        for column in columns:
                            value = str(item[column]).replace('\n','').replace(',','')
                            row_values.append(value)
                        rows.append(','.join(row_values))


                    with open('3-用户列表.txt', 'a+', encoding='utf-8') as out_file:
                        if out_file.tell() == 0:
                            out_file.write(','.join(columns) + '\n')
                        out_file.write('\n'.join(rows)+'\n')


                    print("文件{}中的数据已写入out.txt文件中".format(json_file))


            except Exception as e:
                error_file.write('文件{}处理出错:{}\n'.format(file, e))
                print('文件{}处理出错:{}'.format(file, e))


except Exception as e:
    print("出错了:", e)

四、注意事项

需要看json数据格式:

data对应list不同的json文件中list不一样,需要在代码中进行修改。

处理后的文件内容可能存在重复,需要去重以及处理一些脏数据

五、实际处理效果


来源:51CTO内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯