使用python批量处理文本数据


简介

在跑实验时遇到一个小问题,需要对文本数据(.dat文件)中的内容批量做修改,每个目录下大约有1000条,尝试用python写个脚本去处理


一、需求

  • 要处理的单个文本如下:
NumDevices = 8;
NumSlotes = 64;
GivenBandwidthOld = [0.152539, 0.0675514, 0.0755368, 0.0871062, 0.133525, 0.0969185, 0.148601, 0.0748586];
GivenLatency = [9.56362, 16.5431, 18.4332, 14.8242, 12.2099, 16.2364, 7.78907, 15.705];
HighestPossibleCritFunctionValue = 1.1;

需要对第一行,第三行和第四行做修改,参数NumDevices需要分别改为2,3,4,5,6,7,则下面的两个列表中的数据数量需要与之对应

  • NumDevices = 2为例
NumDevices = 2;
NumSlotes = 64;
GivenBandwidthOld = [0.152539, 0.0675514];
GivenLatency = [9.56362, 16.5431];
HighestPossibleCritFunctionValue = 1.1;

二、代码

import os
import glob

if __name__ == '__main__':
    txt_list = glob.glob("E:/Code/Pycharm workplace/TDM-script/801-1000/*.dat")

    #依次读取目录下的每个文件
    for txt_item in txt_list:
        with open(txt_item) as f:
            lines = f.readlines()
        with open(txt_item, 'w') as f:
            #对每个文件,读取每一行并按关键字判断是否需要修改
            for line in lines:
                s1 = 'NumDevices'
                s2 = 'GivenBandwidthOld'
                s3 = 'GivenLatency'
                if s1 in line:
                    line_split_1 = line.strip().split()
                    new1 = line_split_1[0] + ' ' + line_split_1[1] + ' ' + '2;' + '\n'
                    f.write(new1)
                elif s2 in line:
                    line_split_2 = line.strip().split()
                    new2 = line_split_2[0] + ' ' + line_split_2[1] + ' ' + line_split_2[2] + ' ' + line_split_2[3] + ']' + '\n'
                    f.write(new2)
                elif s3 in line:
                    line_split_3 = line.strip().split()
                    new3 = line_split_3[0] + ' ' + line_split_3[1] + ' ' + line_split_3[2] + ' ' + line_split_3[3] + ']' + '\n'
                    f.write(new3)
                else:
                    f.write(line)





总结

  • 对于这种已经按空格分割的数据格式,直接用split()函数即可
  • 处理后的结果虽然在最后一项还包含一个符号,但并不影响数据读取,这个以后可以考虑优化
  • 最后附上文件操作open()的参数供参考
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值