Python自动化之如何格式化txt数据?

2022-06-27 14:09:37 浏览数 (1)

在平时都工作中,我们会使用很多由客户或者第三方提供的数据,但是数据格式并不符合我们的要求,这个时候我们就需要手动去调整到我们需要的格式,如果数据量比较大,会花费很多时间,如果我们使用Python,自动化处理数据,会节省很多时间,而且可以一劳永逸,后续的数据处理都可以用Python处理,本篇我们介绍一下Python自动化之处理txt文档.

在开始撸代码之前,我们首先要去研究下原始文件,以及我们想要的数据格式,然后在制定程序逻辑,开始撸代码。

本次我们处理EDID的数据,客户给的EDID数据是txt文件,格式如下:

原始数据:

然后我们想处理为如下的格式来使用,处理后的格式:

撸代码前,我们先思考一下如何做,一般格式化数据,可以简单的分为三个步骤:

读取原始文件

处理数据格式

写入新文件

我们就先来分解这三个步骤:

读取原始文件

我们要读取txt文件,首先就需要先打开文件,然后才能读取,我们直接使用open函数打开文件,然后使用readlines逐行读取文件内容。

这里需要注意的是,使用open打开文件,当文件不用的时候,一定要用close去关闭。

心里是不是嘀咕咋这么繁琐,是不是怕忘记close,没关系,Python怎么可能让这种影响撸代码心情的情况发生, 所以就有了with open方法,不需要使用close关闭文件,会自动关闭打开后用完的文件。

具体用法如下:

代码语言:javascript复制
def read_data_file(file_name):
    with open(file_name, "r") as fr: # file_name就是你要打开的文件名
        contents = fr.readlines() # 一次性逐行读取文件内容,并按行存为列表
    return contents

处理数据格式

当我们读取到数据后,就可以去处理数据为我们需要的格式了,代码如下:

代码语言:javascript复制
def format_data(contents):
    format_contents= []
    for content in contents: 
      format_content = ''.join(["0x", content]).replace("n", '') # 使用join在数据前加上0x, 使用replace去除换行
      format_contents.append(format_content) # 把格式化后的数据逐一增加到列表里
    return format_contents

写入新文件

我们把处理后的数据,写入新的文件里保存使用,写入文件用write函数就可以,同样的,要写入文件,需要先打开文件,然后把数据写入,write函数有好几种写入模式,这里我们通过追加的方式去写入,代码如下:

代码语言:javascript复制
def write_to_file(output_file, format_contents):
    with open(output_file, "a") as fw:
        for format_content in format_contents:
            fw.write(format_content   ", ")

运行主函数

要写入文件,我们先定义好输出文件名,我们可以通过时间来定义输出文件名,我们也需要得到用户输入的文件,这里需要用到os、sys、datetime模块。

代码语言:javascript复制
import os
import sys
import datetime

if __name__ == "__main__":
    file_name = sys.argv[1] # 得到用户输入的文件
    output_time = datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S") # 获取当时时间并格式化
    output_name = os.path.basename(file_name).split(".")[0] # 获取用户输入文件名字
    output_file = output_name   "_"   output_time   ".txt" # 输出文件名
    
    before_datas = read_data_file(file_name)
    format_datas = format_data(before_datas)
    write_to_file(output_file, format_datas)
    
    print("Finished, please check file-> "   output_file)

本篇文章处理的原始数据算是比较干净的数据,处理起来也比较容易,但是如果遇到更复杂的数据,要从里面提取出想要的数据并格式化,那就需要更多的步骤了,下一篇我们介绍更复杂的txt原始数据处理方式。

0 人点赞