微信聊天记录提取及分析(wordcloud+pyecharts)

2023-05-16

0. 前言

​ 之所以想要提取微信的聊天记录并分析是因为也开始再学习python,但是单纯看看语法什么的又很无趣,无意间看到python可以进行微信聊天记录的分析,就自己尝试做了一下,感觉还是挺有意思的。

1.提取聊天记录数据库

​ 我所用的是小米手机,所以提取聊天记录是主要是通过本地备份功能,其余手机也可参考下述博客,具体流程可参考:

微信聊天记录导出(2020新版)

安卓\电脑微信聊天记录导出表格

微信聊天记录数据提取并分析

利用python做微信聊天记录词云分析

提取微信数据库的主体流程都差不多,基本都是先进行备份,然后将备份文件复制到电脑进行解压,解压完成之后根据得到的数据库密码访问数据库。提取数据库的过程基本上都不会有什么问题,主要会出现的问题在于获取微信数据库密码。我开始使用的是手机IMEI + uin拼接取其32位MD5码前7位的方式,但是因为我手机上有两个IMEI码,尝试了各种组合获得的密码始终是错误的,所以就放弃采用这种方式,但是根据其他博客中的内容,这种方式也可以获取数据库密码。

​ 我最终采用的是反序列化的方式获取数据库密码,即将微信com.tencent.mm\r\MicroMsg\systemInfo.cfg和com.tencent.mm\r\MicroMsg\CompatibleInfo.cfg这两个文件复制出来,通过参考代码获取数据库密码。开始直接在命令行通过javac编译并运行,如下所示


javac IMEI.java
java IMEI systemInfo.cfg CompatibleInfo.cfg		

​ 但是直接在命令行中运行会报 “错误: 找不到或无法加载主类 IMEI 原因: java.lang.ClassNotFoundException: IMEI”,但是将代码放在IDEA中可以运行并得到最终数据库密码,代码如下:

import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.security.MessageDigest;
import java.util.HashMap;

public class IMEI {
    public static void main(String[] args) {
        // systemInfo.cfg存储路径,修改为电脑中存储位置
        String systemInfo_path = "D:\\wechet-anayze\\systemInfo.cfg";
        // compatibleInfo.cfg存储路径,修改为电脑中存储位置
        String compatibleInfo_path1 = "D:\\wechet-anayze\\CompatibleInfo.cfg";
        try {
            ObjectInputStream in = new ObjectInputStream(new FileInputStream(
                    path));
            Object DL = in.readObject();
            HashMap hashWithOutFormat = (HashMap) DL;
            ObjectInputStream in1 = new ObjectInputStream(new FileInputStream(
                    path1));
            Object DJ = in1.readObject();
            HashMap hashWithOutFormat1 = (HashMap) DJ;
            String s = String.valueOf(hashWithOutFormat1.get(Integer
                    .valueOf(258))); // 取手机的IMEI
            s = s + hashWithOutFormat.get(Integer.valueOf(1)); //合并到一个字符串
            s = encode(s); // hash
            System.out.println("The Key is : " + s.substring(0, 7));
            in.close();
            in1.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static String encode(String content) {
        try {
            MessageDigest digest = MessageDigest.getInstance("MD5");
            digest.update(content.getBytes());
            return getEncode32(digest);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    private static String getEncode32(MessageDigest digest) {
        StringBuilder builder = new StringBuilder();
        for (byte b : digest.digest()) {
            builder.append(Integer.toHexString((b >> 4) & 0xf));
            builder.append(Integer.toHexString(b & 0xf));
        }
        return builder.toString();
    }
}

​ 微信数据库及数据库密码获取完成之后就可以通过sqlcipher(官方下载地址)软件访问数据库中内容,查看具体的聊天信息等,我在后续处理中主要用到了messagecontact表,message表中记录了所发送的所有消息信息,contact表中记录了所有的联系人信息,message表中主要使用到的内容如下:

message表主要内容

列名内容
msgId按所有消息时间顺序的唯一编号
type聊天内容类型
isSend标识消息是自己发送还是对方发送,1表示自己,0表示对方
createTime聊天时间
talker单聊的wxid或群聊编号"XXXX@chatroom"
content聊天内容,单聊直接显示内容,群聊格式为“wxid:\n”内容

​ 因为也挺想知道和其他人的聊天类型,所以就也根据message表中的type值结合createTime查找具体的聊天信息,从而对type类型做了如下分类,

type类型信息

type值表示内容
1文本内容
2位置信息
3图片及视频
34语音消息
42名片(公众号名片)
43图片及视频
47表情包
48定位信息
49小程序链接
10000撤回消息提醒(XXXX撤回了一条消息)
1048625照片
16777265链接
285212721文件
419430449微信转账
436207665微信红包
469762097微信红包
·11879048186位置共享
(还有未知type信息,待补充)

contact表主要内容

列名含义
username微信id,格式是"wxid_xxxxxxxx"或者一看就是自己设置的
alias自己设置的那个可以通过查找加好友的微信名(和上面那个有的有区别有的为空)
conRemark联系人备注名
nickname微信名片上的名字,公众号的名字
contactLabelIds联系人标签号

2.数据预处理

2.1 message表和contact表获取

​ 获取到微信数据库及数据库密码后,可通过sqlciper软件查看数据库中内容,同时也可将所需的数据导出,可通过file/Export/Table as CSV file选项,选择需要导出的数据表,将之存储为CSV文件。

这里需要注意一下:

​ 如果在python中直接读取导出的csv文件夹,python中会报错,大致是因为编码错误。其余博客中有提到使用excel打开导出的csv文件,然后以utf-8格式另存,最后读取另存后的文件,通过试验这种方法可以进行读取,但是因为csv文件用excel打开时超过16位的数字将会被强制使用科学计数法表示,所以message表中的createTime会被使用科学计数法表示,另存后的文件中creatTime时间精度会损失,所以我最终采用了一个简单粗暴的方法:用记事本打开csv文件,然后以utf-8的形式另存,在python中就可以正常读取了。(话说用记事本打开要比用excel打开快好多倍)

2.2 message表预处理

​ 因为message表中和contact表中含有大量数据分析时不用的数据列,所以在数据预处理阶段中,只需要提取message表和contact表中我们所关注的一些数据。对于message表而言,我们只关注talker,createTime,type, isSend, content所表示的内容,也即聊天对象,聊天时间,消息类型,消息由谁发送,聊天内容。更近一步,对于聊天内容而言,我们只关注文本消息(文本消息可用于后续制作词云),对于其他类型的消息我们只需要统计出现的次数,而不必关注具体内容。所以在预处理过程中,同时需要将非文本类型消息内容置0,这样做的另一个好处是可以大大减少message表的数据量,就个人而言,将非文本消息置零后,message文件大小由134MB缩小到29M。

提取talker,createTime,type, isSend, content内容

"""
Create on 2020-11-21
@author: muxiaohe
"""
# 对message表中内容进行处理,只留下所需的type, isSend, createTime, talker, content内容,并将之存储于新的文件中
def get_needed_data(file_path, save_file_path):
    message = read_file(file_path)
    message = message[['type', 'isSend', 'createTime', 'talker', 'content']]
    message.to_csv(save_file_path, encoding='utf_8_sig',header=True, index=False)

将非文本消息置零

"""
Create on 2020-11-21
@author: muxiaohe
"""
# 对message表中数据进行处理,,删除content中的无用数据,将type中非1值对应的content数据统统置为零
def data_clean(file_path, save_path):
    message = pd.read_csv(file_path, sep=',', encoding='utf-8', low_memory=False)
    print("源文件大小: ", message.shape)
    message.loc[message.type != 1, 'content'] = 0
    print("处理后文件大小: ", message.shape)
    message.to_csv(save_path, encoding='utf_8_sig', header=True, index=False)

2.3 contact表预处理

​ 与message表类似,contact表也需去除无关数据,contact表中我们只提取 usename, alias, conRemark, nickname信息,同时在处理时只保留了有备注的联系人,没有备注的联系人也没必要分析聊天记录。

"""
Create on 2020-11-21
@author: muxiaohe
"""
# 对contact表中数据进行预处理,获取所需数据,清除其余数据
def contact_pre_treatment(file_path, save_path):
    contact_path = r"D:\wechet-anayze\recontact.txt"
    contact_save_path = r"D:\wechet-anayze\pre-recontact.csv"
    contact = pd.read_csv(contact_path, sep=',', encoding="utf-8", low_memory=False)
    print("处理前文件大小: ", contact.shape)
    contact = contact[['username', 'alias', 'conRemark', 'nickname']]
    # 删除无用记录,只保留有备注的联系人
    contact1 = contact.drop(contact[pd.isna(contact.conRemark)].index)
    print("处理后文件大小: ", contact.shape)
    contact1.to_csv(contact_save_path, encoding='utf_8_sig', header=True, index=False)

3.聊天记录分析

3.1 获取常用联系人聊天次数

​ 在预处理的基础之上,获取每个联系人的聊天次数,并据此使用pyecharts绘制柱状图,使用pyecharts绘制时需特别注意:pyecharts传入数据时需要int数据,而从文件中读取赋值到list中的数值类型为int64,需要先使用int()函数进行转换,否则绘制出来的图形中data数据域将都为NaN

"""
Create on 2020-11-21
@author: muxiaohe
"""
# 获取常用联系人聊天次数
def get_chat_nums(message_path, contact_path):
    """
    :param message_path: 预处理完成后的message表存储路径
    :param contact_path: 预处理完成后的contact表存储路径
    :return:
    """
    # message_path = r'D:\wechet-anayze\pre-message-2.txt'
    # contact_path = r'D:\wechet-anayze\pre-recontact.csv'

    message = pd.read_csv(message_path, sep=',', encoding='utf-8', low_memory=False)
    contact = pd.read_csv(contact_path, sep=',', encoding='utf-8', low_memory=False)
    # 提取出联系人列表中用户名和备注名称
    contact = contact[['username', 'conRemark']]
    # 将用户名提取出来
    username = contact['username'].tolist()
    print(type(username))
    # 将用户名及备注名提取为一个字典
    contact_dict = dict(zip(contact['username'], contact['conRemark']))
    # 联系人及其聊天次数集合
    contact_sum_message = {}
    # 全部联系人聊天次数集合
    sum_message = 0
    # 联系人列表
    uname_list = []
    # 联系人列表对应的聊天次数列表
    chat_num_list = []
    # 遍历联系人列表,并逐一统计聊天次数
    for uname in username:
        # 根据微信id获取真实姓名,key为真实姓名
        key = contact_dict.get(uname)
        # 根据微信id统计聊天次数,value:聊天次数
        value = (message['talker'] == uname).sum()
        # 过滤聊天次数为0的联系人,只保留聊天次数不为0的联系人
        if value != 0:
            contact_sum_message[key] = value
            sum_message += value
            uname_list.append(key)
            # 这里需特别注意:value值也即聊天的次数格式是int64,但是pyecharts中如果传入的是int64时,最终渲染出的html文件中会数据会丢失,
            # 所以需转为int值(血泪教训)
            chat_num_list.append(int(value))

    # print(contact_sum_message)
    print("总聊天次数: ", sum_message)

    # 使用pyecharts绘制柱状图
    c = (
        Bar(init_opts=opts.InitOpts(width="1600px", height="600px", page_title="聊天次数统计"))
        .add_xaxis(uname_list)
        .add_yaxis(series_name="聊天次数", y_axis=chat_num_list, color='#FF6666')
        .set_global_opts(
            # 标题配置
            title_opts=opts.TitleOpts(title="聊天次数统计"),
            # X轴区域缩放配置项,可使用list同时配置多个配置项
            datazoom_opts=[opts.DataZoomOpts(range_start=20, range_end=40), opts.DataZoomOpts(type_="inside")],
            # 区域选择组件
            brush_opts=opts.BrushOpts(),
            # X坐标轴旋转
            xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
            # 工具箱组件
            toolbox_opts=opts.ToolboxOpts(),
            # 图例配置
            legend_opts=opts.LegendOpts(is_show=False),
        )
        .set_series_opts(
            label_opts=opts.LabelOpts(is_show=False),
            # 配置最大值最小值刻度线
            markline_opts=opts.MarkLineOpts(
                data=[
                    opts.MarkLineItem(type_="min", name="最小值"),
                    opts.MarkLineItem(type_="max", name="最大值"),
                    opts.MarkLineItem(type_="average", name="平均值"),
                ]
            ),
        )
        .render("chat_num_count.html")
    )

3.2 获取聊天消息中不同类型消息占比

"""
Create on 2020-11-21
@author: muxiaohe
"""
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Pie
# 获取各个消息聊天记录数量,并使用pycharts绘图
def get_message_type_frequency(file_path, wxid):
    """
    :param file_path: 经过预处理后的message表存储位置
    :param wxid: 待查询人的微信id
    :return:
    """
    # file_path = r'D:\wechet-anayze\pre-message-2.txt'
    message = pd.read_csv(file_path, sep=',', encoding='utf-8', low_memory=False)
    # wxid = ''

    # 进行数据筛选,选择message表中与所需微信id一致的数据
    message = message[message['talker'] == wxid]
    # 根据消息类型统计每种类型的频次(索引为数字编码)
    chat_type_count = message['type'].groupby(message['type']).size()
    # 消息类型对应关系
    message_type = {'1': '文本内容', "3": "图片及视频", "34": "语音消息", "42": "名片信息", "43": "图片及视频",
                    "47": "表情包", "48": "定位信息", "49": "小程序链接", "10000": "消息撤回提醒", "1048625": "网络照片",
                    "16777265": "链接信息", "419430449": "微信转账", "436207665": "红包", "469762097": "红包",
                    "-1879048186": "位置共享"}
    # 集合对象,功能与chat_type_count相同,存储(聊天类型:频次)信息(索引为对应中文类型)
    chat_type_count_dict = {}
    # 根据消息类型代码
    for key in chat_type_count.index:
        if str(key) in message_type.keys():
            print(message_type.get(str(key)))
            chat_type_count_dict[message_type.get(str(key))] = chat_type_count[key]
        else:
            chat_type_count_dict[key] = chat_type_count[key]
    print("结果集类型: ", type(chat_type_count_dict))
    print(chat_type_count_dict)

    x_data = []
    y_data = []
    for key in chat_type_count_dict:
        temp = [str(key), chat_type_count_dict.get(key)]
        x_data.append(str(key))
        y_data.append(int(chat_type_count_dict.get(key)))

    a1 = []
    for z in zip(x_data, y_data):
        a1.append(z)

    pie = Pie(init_opts=opts.InitOpts(width="1600px", height="600px", page_title="消息类型统计"))
    pie.add(
        "",
        data_pair=a1,
        center=["35%", "60%"],
    )
    pie.set_global_opts(
        title_opts=opts.TitleOpts(title="Pie-调整位置"),
        legend_opts=opts.LegendOpts(pos_left="15%"),
    )
    pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c}"))
    pie.render("message_type_count.html")

3.3 聊天记录词云

​ 可选择具体的聊天对象,获取全部的聊天内容,代码中可以chinese_slice选择是否进行分词,如果不进行分词则将全部聊天内容拼接到一起,通过wordcloud模块生成词云,如果选择分词则会调用jiebe模块先进行分词,然后再通过wordcloud模块生成词云。

"""
Create on 2020-11-21
@author: muxiaohe
"""
import imageio
import jieba
import pandas as pd
import matplotlib.pyplot as plt
import wordcloud
# 根据聊天记录生成词云
def get_wordcloud(file_path, stopword_path, wxid, image_path):
    """
    :param file_path: 预处理完成后的message表存储位置
    :param stopword_path: 停用词文件存储位置
    :param wxid: 待查询人微信id
    :return:
    """
    # 分词及词云处理
    # message_path = r'D:/wechet-anayze/pre-message-2.txt'
    # stopword_path = r'D:/wechet-anayze/stopword.txt'
    # 文件读取
    message = pd.read_csv(file_path, sep=',', encoding='utf-8', low_memory=False)
    # 数据筛选,选择对应微信id的信息
    message = message[message['talker'] == wxid]
    # 提取聊天内容信息
    content = message['content']

    # 中文字型存储路径
    font_path = r'C:\Windows\Fonts\MSYH.TTC'
    # 是否选用分词
    wordcut_flag = True
    # 词云图片输出路径
    image_out_name = 'word-heart.png'

    # 读取停用词表
    stopwords = [line.strip() for line in open(stopword_path, encoding='UTF-8').readlines()]

    if image_out_name is None:
        image_out_name = 'word-heart.png'
    if wordcut_flag:
        print("进行中文分词")
        outstr = ""
        text = ",".join(content)
        text_list = jieba.lcut(text, cut_all=False)


        for word in text_list:
            if word not in stopwords:
                if word != '\t' and '\n':
                    outstr += word
                    outstr += " "

        # 如果想存储分词后结果,可取消下方注释
        # savepath = r'D:/wechet-anayze/textlist.txt'
        # fp = open(savepath, 'w', encoding='utf8', errors='ignore')
        # fp.write(outstr)
        # fp.close()

        text = outstr
    else:
        print("不进行中文分词")
        text = " ".join(content)

    # 词云形状图片位置
    mk = imageio.imread(image_path)

    # 构建并配置词云对象w,注意要加scale参数,提高清晰度
    w = wordcloud.WordCloud(width=1000,
                            height=700,
                            background_color='white',
                            font_path=font_path,
                            mask=mk,
                            scale=2,
                            stopwords=None,
                            contour_width=1,
                            contour_color='red')
    # 将string变量传入w的generate()方法,给词云输入文字
    w.generate(text)
    # 展示图片
    # 根据原始背景图片的色调进行上色
    image_colors = wordcloud.ImageColorGenerator(mk)
    plt.imshow(w.recolor(color_func=image_colors))
    # 根据原始黑白色调进行上色
    # plt.imshow(wc.recolor(color_func=grey_color_func, random_state=3), interpolation='bilinear') #生成黑白词云图
    # 根据函数原始设置进行上色
    # plt.imshow(wc)

    # 隐藏图像坐标轴
    plt.axis("off")
    plt.show()

    # 将词云图片导出到当前文件夹
    w.to_file(image_out_name)

有兴趣的话可以参考我的GitHub地址,里边有所需的全部文件及代码,有帮到的请给star呀~

微信聊天记录提取及分析

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信聊天记录提取及分析(wordcloud+pyecharts) 的相关文章

  • 维修电脑遇到狂妄至极的经理,经理:动下电脑试试,试试就试试

    刚刚去单位上门维修电脑才回来 xff0c 没收到钱 xff0c 因为遇到了一位狂妄至极的经理 xff0c 电脑修好后经理让我给他 好处 才能顺利去财务结款 xff0c 我这人脾气也比较暴躁 xff0c 我可以心甘情愿地主动给而坚决不接受被人
  • 上门回收电脑走狗屎运,客户要价6000元,还价5500元成交

    正所谓人逢喜事精神爽啊 xff0c 今天我是走了狗屎运了 xff0c 一位客户打电话给我说他要搬家了 xff0c 有一台组装还不到1年的台式电脑不想带走了 xff0c 他让我上门收走 xff0c 现在电脑显卡硬件价格上涨太离谱了 xff0c
  • 大数据杀熟将被严格管制

    国家市场监管总局在7月2日发布 价格违法行为行政处罚规定 修订征求意见稿 以下简称 征求意见稿 征求意见稿 调整六类价格违法行为罚款额度并规定处罚上限 xff0c 新增对电商平台 行业协会商会 中介机构 国家行政机关收费的违法行为罚款规定
  • 数据销毁、硬盘销毁的方法及安全性分析

    数据安全是信息安全的核心问题之一 xff0c 数据安全不仅包括数据加密 访问控制 备份与恢复等以保持数据完整性为目的的诸多工作 xff0c 也包括以完全破坏数据完整性为目的的数据销毁工作 数据销毁是指采用各种技术手段将计算机存储设备中的数据
  • 大宗文件销毁:看2000多箱32吨纸文件是如何被保密销毁的

    如果你的公司存放着10年前的客户采购订单和合同 xff0c 仓库租金每年都在上涨 xff0c 你会怎么处理这些文件呢 xff1f 以前的做法是当废纸卖掉 xff0c 以后的做法是选择适当的文件销毁服务商把这些文件销毁掉 xff0c 这是法律
  • 北京拟新规:回收手机、回收电脑时需当面清理个人信息

    近日 xff0c 北京市市场监督管理局发布了废弃电器电子产品回收规范征求意见稿 其中对收集过程有明确规范 xff1a 回收废旧手机 电脑等涉及个人隐私的电子产品时 xff0c 应当面清理用户个人信息 xff0c 维护客户隐私权 此外 xff
  • 回收电脑要当面销毁数据,提防高考考生信息泄露

    我最近在帮一个小妹妹研究高考填志愿 xff0c 却意外发现了一些奇怪的现象 原本很容易拿到的往年招生数据 xff0c 今年要在各种平台付费才能拿到 xff0c 否则考生和家长就只能看到一张残缺的院校分数线 xff0c 到底是谁在做这门缺德的
  • 数据作假,亚马逊关闭5万中国卖家真相

    图片来源 xff1a Unsplash 紧邻深圳华为坂田基地的五和大道 xff0c 是国内跨境电商卖家的聚集地 8月12日 xff0c 一位坂田跨境电商卖家从高层一跃而下 xff0c 有同行透露原因是 他的亚马逊店铺被封 xff0c 款提不
  • 超星大规模信息泄露,公安机关已经介入,你忘记销毁数据了吧?

    你的密码已被打包出售 xff01 在这个大数据时代 xff0c 个人信息都会记录在手机里 xff0c 且现如今多数的软件都要求实名制 xff0c 个人信息泄露早已成为不可回避的问题 xff0c 其可能导致的严峻后果也要求我们必须谨慎对待每一
  • 如何删除 AlibabaProtect.exe 和 Alibaba PC Safe Service ?

    起因 xff1a 最近被迫升级PC版的阿里旺旺以后 xff0c 系统就莫名其妙的出现问题 xff0c 首先是电脑系统被严重拖慢 xff0c 电脑从开机到正常进入系统至少要5分钟 xff0c 最令我恼火的是 xff0c 本人的电脑一旦接入外接
  • 跨境支付的信息安全知识

    恐怖了 xff0c PayPal这直接清零 xff0c 一点机会也不给了 跨境的大佬们应该都知道 xff0c 自今年3月以来陆续有独立站卖家收到PAYPAL发来的邮件 xff0c 邮件打过是关于账户因为违规被冻结或封禁 中国的跨境电商圈一石
  • 网络安全审查办公室对知网启动审查,数据安全是关键

    据中国网信网消息 xff0c 网络安全审查办公室有关负责人表示 xff0c 为防范国家数据安全风险 xff0c 维护国家安全 xff0c 保障公共利益 xff0c 依据 国家安全法 网络安全法 数据安全法 xff0c 按照 网络安全审查办法
  • 从法律角度看数据安全,数据销毁很重要

    2021年1月 xff0c 巴西的一个数据库30TB数据被破坏 xff0c 泄露的数据包含有1 04亿辆汽车和约4000万家公司的详细信息 xff0c 受影响的人员数量可能有2 2亿 xff1b 2021年3月 xff0c 印度800万核酸
  • 大数据下的数据安全治理,数据销毁很重要

    企业数据安全治理的本质是建立 维护一组企业的 数据法规 xff0c 由这些法规来规范企业所有人员的所有数据活动 任何企业都在使用 产生数据 如果数据是一次性使用的 数据的产生仅仅是副产品 xff0c 那么数据治理就无太大意义 xff0c 应
  • IT界头条2022年7月1日版

    2022年7月 1日 1 国家网信办发布 互联网用户账号信息管理规定 8月1日起施行 2 腾讯 QQ 回应大批账号被盗 xff1a 用户扫描不法分子伪造的游戏登录二维码 3 网络安全审查办公室对知网启动网络安全审查 4 俄罗斯对谷歌传播诋毁
  • 数据安全与销毁案例:美国最近发生大规模数据泄露

    据福克斯新闻网6月20日报道 xff0c 一位网络安全专家称 xff0c 美国近日发生一起大规模的选民信息泄露事件 xff0c 将近2亿选民的个人信息遭意外曝光 网络风险研究员克里斯 维克里在其博客文章中表示 xff0c 与美国共和党全国委
  • 回收销毁,IT界头条2022年7月12日版

    2022年7月 12日 1 关于构建数据基础制度更好发挥数据要素作用的意见 审议通过 2 微软在新报告中揭示了俄乌冲突期间的网络战细节 3 西北工业大学遭受境外网络攻击 xff0c 西安警方已立案侦查 4 立陶宛对俄罗斯 禁运 后遭网络攻击
  • 回收销毁,IT界头条2022年7月7日版

    2022年7月 7日 1 关于构建数据基础制度更好发挥数据要素作用的意见 审议通过 2 微软在新报告中揭示了俄乌冲突期间的网络战细节 3 西北工业大学遭受境外网络攻击 xff0c 西安警方已立案侦查 4 立陶宛对俄罗斯 禁运 后遭网络攻击
  • 数据安全与销毁:数据安全已经上升到了国家战略层面

    日前 xff0c 中央全面深化改革委员会审议通过了 关于构建数据基础制度更好发挥数据要素作用的意见 xff08 下称 意见 xff09 xff0c 明确提出 把安全贯穿数据治理全过程 业内专家表示 xff0c 数据安全已经上升到了国家战略层
  • C++用带有默认参数的函数实现,求2个或3个正整数中的最大数

    1 题目要求如下 xff1a C 43 43 用带有默认参数的函数实现 xff0c 求2个或3个正整数中的最大数 2 来吧 xff0c 展示 xff1a include lt iostream gt using namespace std

随机推荐

  • 程序设计思维与实践 Week2 作业B "倒水问题"

    数据 xff1a Sample Input xff1a 2 7 5 2 7 4 Sample Output xff1a fill B pour B A success fill A pour A B fill A pour A B succ
  • armbian的换源

    安装好armbian和众多Linux一样 xff0c 最重要的就是把原来的官方源给替换掉 xff0c 换成国内的源 xff0c 当然个人建议还是把官方的源备份一下以防出错 cp etc apt sources list etc apt so
  • Ubuntu18.04上网断断续续

    刚刚体验了一把Ubuntu18 04 LTS xff0c 有个小问题就是 xff0c 网络链接老是断断续续 后来在这里找到了解决方法 xff1a span class hljs built in sudo span gedit etc pp
  • Coursera Machine Learning 第二周 quiz Octave/Matlab Tutorial 习题答案

    1 Suppose I first execute the following Octave Matlab commands 1 2
  • C语言random问题

    总 结一下C语言random的用法 xff1a srand xff08 xff08 int xff09 time xff08 NULL xff09 xff09 用于设定随机数种子 rand 100 xff0c 产生 0 99 的随机数 如果
  • java.util.regex.PatternSyntaxException

    在处理字符串用到String replaceAll 这个方法的时候出现了这个异常 Exception in thread 34 main 34 java util regex PatternSyntaxException Dangling
  • Shell 脚本 Debug 方法

    可能有的程序员在对程序调试的时候用printf或者echo将信息挨条打印出来 xff0c 但是这比较麻烦 xff0c 因为在交付的时候还要将这些语句一条条删除 xff0c 下面对shell debug的方法稍微做一个总结 xff1a 1 使
  • JAVA 点击按钮展开一个新的Jpanel

    问题不太容易用语言来描述 xff0c 先直接上图吧 xff1a 点击按钮之前 xff1a 点击按钮之后 xff1a 那么如何实现这种功能呢 xff1f 首先在图一中的主JFrame中添加一个JScrollPane xff0c 在点击按钮后n
  • java 实现日历选择器

    首先引用com qt datapicker DatePicker 包实现如下 xff1a package Date import java awt event ActionEvent import java awt event Action
  • 获取JPasswordField组件中的密码

    在JTextField中有一个方法getText xff0c 可以返回组件中输入的字符串 xff0c 但是对于JPasswordField类 xff0c getText 方法已经不适用了 xff0c 执意使用的话 xff0c 获取的也是一串
  • 指针的大小

    说这个之前先了解几个概念 xff1a 字长 xff1a 字长是CPU的主要技术指标之一 xff0c 指的是CPU一次能并行处理的二进制的位数 xff0c 字长是8的整倍数 xff0c 通常的PC机的字长为16位 xff0c 32位 xff0
  • 程序设计思维与实践 Week6 作业A氪金带东树的直径的应用

    题意 xff1a 依次输入图中的点以及边权等信息 xff0c 最后输出每个点在图中所能到达的最远的路线的长度 例如所给的样例 xff1a input 输入文件包含多组测试数据 对于每组测试数据 xff0c 第一行一个整数N N lt 61
  • 《UNIX环境高级编程》(第二版)找不到apue.h问题

    UNIX环境高级编程 xff08 第二版 xff09 这本书 xff0c 实例程序中都包含头文件apue h xff0c 寻找linux usr include中 xff0c 缺找不到此头文件 xff0c 因此编译时会出错 实际上apue
  • java程序中,如何安全的结束一个正在运行的线程?

    如何停止java的线程一直是一个开发多线程程序常遇到的一个问题 在Java的多线程编程中 xff0c java lang Thread类型包含了一些列的方法start stop stop Throwable and suspend dest
  • RoboMaster视觉教程(1)摄像头

    观文有感 之 RoboMaster视觉教程 xff08 1 xff09 摄像头 闲来垂钓碧溪上 今天钓到一篇RM视觉摄像头的好文 xff0c 记录一下笔记 xff1a 文章目录 观文有感 之 RoboMaster视觉教程 xff08 1 x
  • 如何成为一名很酷的机器人工程师

    观文有感 之 如何成为一名很酷的机器人工程师 闲来垂钓碧溪上 今天来钓一波职业规划 xff0c 记录一下笔记 xff08 特别注意 xff1a 本文中大部分内容是复制粘贴的 xff0c 只有少数位置的删改和整理 xff0c 目的是分享一下大
  • 不同层面禁用PUT、DELETE、HEAD、TRACE、OPTIONS请求方式

    背景 对于一些对安全级别要求高的应用 xff0c 可能只允许有GET和POST请求 xff0c 其他请求方式需要禁用 xff0c 那么可以从多个层面来进行禁用 下面从大范围禁用到小范围禁用罗列如下 xff08 假定服务容器是tomcat x
  • keil中出现Undefined symbol FLASH_PrefetchBufferCmd (referred from main.o)等问题解决办法

    在keil中仿照别人的程序写了RCC初始化的程序 xff0c 编译后出现以下问题 obj pro1 axf Error L6218E Undefined symbol FLASH PrefetchBufferCmd referred fro
  • 接口测试——requests接口请求(十)

    1 requests库介绍与安装 requests库介绍 requests是一款非常火爆且常用的Python三方库能够实现HTTP协议的各种请求方法使用简单易上手 requests库的安装方法 pip install requests安装成
  • 微信聊天记录提取及分析(wordcloud+pyecharts)

    0 前言 之所以想要提取微信的聊天记录并分析是因为也开始再学习python xff0c 但是单纯看看语法什么的又很无趣 xff0c 无意间看到python可以进行微信聊天记录的分析 xff0c 就自己尝试做了一下 xff0c 感觉还是挺有意