登录       
  人生苦短,必用Python

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

Python KenZhang 121浏览 0评论

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


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


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


原始数据:


image.png



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


2.png


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

    读取原始文件

    处理数据格式

    写入新文件


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


读取原始文件


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


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


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


具体用法如下:

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


处理数据格式


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

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函数有好几种写入模式,这里我们通过追加的方式去写入,代码如下:

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模块。

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原始数据处理方式。


转载请注明: KenZhang » Python自动化之如何格式化txt数据?

喜欢 (1) or 分享 ( 0)

联系我请直接在公众号留言~

扫码或搜索:极简小课

极简小课

微信公众号 扫一扫关注

想结交更多的朋友吗?

来PyDjango瞧瞧吧

PyDjango

QQ群号 88133982 立即加入

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的