利用python对txt数据进行处理并存入excel

(本博客代码仅用以记录研究生生涯学习,转载请注明出处)
本次需求为对机器获得的数据进行初步处理以得到格式统一的数据。
数据格式如下:
在这里插入图片描述
需要将文本文件的数据读取并整合为统一的数据格式,然后删除$GNGST所在行,后存入excel中。

"""
第一步:设置文件夹,获取文件名
第二布:读入文件并保存为data以及待修改的data_revise
第三步:对data_revise进行处理
第四步:将data和data_revise合并并存为txt或excel
第五步:完成
"""
def main():
    path = r"E:\xxxx\xxxx\xxxx\xxxx" #文件夹目录
    filespath = get_files(path)[0] # 文件路径
    files = get_files(path)[1]
    files_txt = []
    files_excel = []
    for i in range(len(files)):  #以txt为尾缀修改文件,主要是为了方便保存
        files_txt.append(files[i][:25]+".txt")
    for i in range(len(files)):  #以excel为尾缀修改文件
        files_excel.append(files[i][:25]+".xlsx")

    for i in range(len(filespath)):
        try:
            data = get_data(filespath[i])  # 此处需更改
            data_updata = check_file(data)[0]  # 剔除乱码数据
            data_revise = check_file(data)[1]  # 乱码数据
            data_revise = dell_data_revise(data_revise)  # 对乱码数据进行修正
            data = data_updata + data_revise  # 得到修正后的数据
            data = Eliminate_unwanted_data(data) # 剔除$GNGST数据
            # 把data的str数据转换为list并保存到excel中
            for j in range(len(data)):
                data[j] = data[j].split(",")
            df = pd.DataFrame(data)
            df.to_excel(files_excel[i], index=False)  # 保存到本地excel

        except :
            # 把异常行写入txt中以方便手动修改
            print("文件"+files[i]+"有异常")
            file_handle = open(files_txt[i],mode = 'w')
            erroy_txt = check_file(data)[2]
            file_handle.writelines(erroy_txt)
        continue

def get_files(path):
    """
    :param path: 原目标文件夹
    :return:数据文件路径
    """
    files = []
    filespath = []
    for filepath,dirnames,filenames in os.walk(path):
        for filename in filenames:
            filespath.append(os.path.join(filepath, filename))
            files.append(filename)
    return filespath,files

def get_data(file):
    """
    :param path: 目标文件绝对路径
    :return: 返回list数据
    """
    data = []
    for line in open(file, "r"):
        line = line[:-1]  # 去掉换行符,也可以不去
        data.append(line)
    return data

def Eliminate_unwanted_data(data):
    """
    此处剔除$GNGST数据
    """
    data_finall=[]
    for i in range(len(data)):
        if re.search(r"\$GNGST", data[i]):
            pass
        else:
            data_finall.append(data[i])
    return data_finall




def check_file(data):
    """
    对文件进行检查,并返回需要修改的data_revise以及删除后的data文件
    """
    len1 = len(data[0])  # 需要数据的标准长度88,89,87
    len2 = len(data[1])  # 需要删除的数据的标准长度61,60,59
    data_updata= []
    data_revise = []  # 用以储存待修正的行
    j = 0  # 假设数据重叠行为0
    erroy_txt = []
    for i in range(len(data)):  # 对整个文件进行遍历判断是否符合规范
        if len(data[i]) == len2:  # 此处可更具具体文件修改
            data_updata.append(data[i])
        elif len(data[i]) == len1:
            data_updata.append(data[i])
        elif len(data[i]) == len2 - 1:
            data_updata.append(data[i])
        elif len(data[i]) == len2 + 1:
            data_updata.append(data[i])
        elif len(data[i]) == len2 + 2:
            data_updata.append(data[i])
        else:
            # print("数据有重叠错误,且重叠行为:", i)  # 输出重叠行具体行数
            erroy_lang = str(i)+"\n"
            erroy_txt.append(erroy_lang)
            data_revise.append(data[i])
            j += 1
    # print("数据重叠行共有:", j)  # 输出重叠行总数
    return data_updata,data_revise,erroy_txt

def dell_data_revise(data_revise):
    for i in range(len(data_revise) // 2):  # 判断两列中哪一列比较长# 仅用两列中谁比较长有误,改为通过字符判定
        if re.search(r"\$", data_revise[2 * i]):
            match = data_revise[2 * i].split('$')
            data_revise[2 * i + 1] = '$' + match[1] + data_revise[2 * i + 1]
            data_revise[2 * i] = '$' + match[2]
        else:
            match = data_revise[2 * i + 1].split('$')
            data_revise[2 * i] = '$' + match[1] + data_revise[2 * i]
            data_revise[2 * i + 1] = '$' + match[2]
    return data_revise

main()

最后结果如下:
在这里插入图片描述
(反思:
1、由于未使用线程,因为处理数百万行的数据耗费了一定的时间,后期若有需要可考虑加入线程。
2、由于传感器获取数据时,产生错误数据大多格式规范,因此可以这么使用,但仍存在少量格式完全不规律的数据需人工鉴别
2、本次代码存在一定赘余,并非心目中最理想和简洁的,欢迎各位大佬修改)

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值