在平时都工作中,我们会使用很多由客户或者第三方提供的数据,但是数据格式并不符合我们的要求,这个时候我们就需要手动去调整到我们需要的格式,如果数据量比较大,会花费很多时间,如果我们使用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原始数据处理方式。