如何用PYTHON统计固话来电情况(三)

本文讲述了作者如何通过深入解析WAV音频文件的头文件,发现并提取来电号码、日期和时间等信息的过程,涉及Hex转换和Python脚本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇的目的只有一个,那就是找出录音文件中的信息,来电及时间等这些信息到底藏哪里了。
首先我想到的可能是直接用文件名的形式,但是很遗憾,文件名就是数字序号,并没有其他信息,然后我想到的就是利用音频文件的表演者,专辑等信息,右键属性查看了一下也没有,最后试着用Ulrtaedit打开了一下,果然发现了玄机,原来啊直接就存在这里了,音频文件是有个类似头文件信息的,在第100h行写入了信息,如图
在这里插入图片描述直接用16进制表示出来了,再对照用自带软件的信息,很开就搞懂了每个字符的意思。
下面开始着手提取信息,用二进制打开WAV文件,找到地址,但是再怎么显示成上图的样子这里我卡了一个多小时,最后终于在网上找到了关键的一句!

b = hex(int.from_bytes(a, byteorder=sys.byteorder))

就这么简单的一句我找得好辛苦!
其他的都是日常操作了,贴上代码

#-*-coding:gb2312-*-
import sys
import os
import time
import wave
import json
from pymediainfo import MediaInfo
import csv

file_dir=os.getcwd()
filelist=[]
for root, dirs, files in os.walk(file_dir):
    for f in files:
        if f[-4:]=='.WAV':
            filelist.append(f)
print(filelist)

def get_media_info(media_name):
    media_info = MediaInfo.parse(media_name)
    media_data = json.loads(media_info.to_json())["tracks"]
    timeslast=int(media_data[0]['duration']/1000)
    return timeslast

def getdata(filename):
    file = open(filename, 'rb')
    numberadd = [257, 258, 259]
    dayadd = [265, 266, 267]
    timeadd = [268, 269, 270]
    typeadd = 271
    number = []
    day = []
    time = []

    for i in numberadd:
        file.seek(i)
        a = file.read(1)
        b = hex(int.from_bytes(a, byteorder=sys.byteorder))
        c = b[2:4]
        number.append(c)
        phonenumber = ''.join(number)

    for i in dayadd:
        file.seek(i)
        a = file.read(1)
        b = hex(int.from_bytes(a, byteorder=sys.byteorder))
        c = b[2:4]
        day.append(c)
        days = '-'.join(day)

    for i in timeadd:
        file.seek(i)
        a = file.read(1)
        b = hex(int.from_bytes(a, byteorder=sys.byteorder))
        c = b[2:4]
        time.append(c)
        times = ':'.join(time)

    file.seek(typeadd)
    a = file.read(1)
    b = hex(int.from_bytes(a, byteorder=sys.byteorder))
    c = b[2:4]
    if c == '5':
        types = 'B'
    elif c == '2':
        types = 'Z'
    else:
        types=0

    timelast=get_media_info(filename)
    file.close()
    datalist=[filename,phonenumber, days, times, types,timelast]
    print(datalist)
    return datalist

f = open('data.csv','a+',newline='')
cw = csv.writer(f)
cw.writerow(['文件名','电话号码','日期','时间','类型','时长'])
for f in filelist:
    try:
        cw.writerow(getdata(f))
    except:
        pass

终于搞定了,最后就剩下数据分析画图了,正好复习一下PANDAS的相关知识,等我攒够一个月数据了就继续!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值