Python处理txt数据实例-程序员宅基地

技术标签: python  Py-datapro  

现在有一个具体的案例是这样的:CST电磁仿真软件得到一些txt数据在origin_data文件夹中。需要其中的一些数据来通过origin软件绘制曲线分析一些问题,而且需要里面的所有数据曲线显示在同一个图形中。如果通过手动将txt数据一一复制到origin(或excel)中,txt没有整列复制功能,所有手动复制很麻烦。通过Python脚本提取相关数据就比较容易了。

这里写图片描述

首先分析一下txt数据格式:

格式1:

这里写图片描述

格式2:

这里写图片描述
每种格式都是8列数据,一列的数据是关于角度的,我们需要的数据是第3列的rcs数据。之前有一个方案是根据角度来判断需要相应的数据范围,但是这个方案显然有问题,因为两种数据格式中表示角度的数据不在同一列,而且两种格式的角度范围不一样(方位角:0-180;俯仰角:0-360)。所以在已有的代码下,我提出的一种想法是:提取每个txt的第三列rcs数据分别保存为excel文件,然后再限制角度范围进行提取合并(可能是觉得Python操作excel更方便吧,没有尝试直接操作txt的提取合并)。

代码实现:

分两步,第一步保存“分excel”

#! C:\Python27\python
# -*- coding: utf-8 -*-
import os
import xlrd
import sys
from xlwt import *
if __name__ == '__main__': #判断是否直接运行该文件
    threadhold_input = sys.argv[1]#运行程序时要输入一个参数表示argv[1]的值
    file_directory = 'F:\\origin_data\\'  # 指明被遍历的文件夹 
    savefile=r'F:\origin_data1'#创建目录
    if not os.path.isdir(savefile):
        os.mkdir(r'F:/origin_data1/')
    xls_path='F:\\origin_data1\\'#指定“分excel”保存的路径
    for parent, dirnames, filenames in os.walk(file_directory): 
        for filename in filenames: # 输出文件信息    
            with open(file_directory+filename, 'r') as fp:# 打开文件夹中的文件内容
                excel = xlwt.Workbook()# 创建工作簿
                sheet = excel.add_sheet('DataSheet', cell_overwrite_ok=True)
                for j, line in enumerate(fp.readlines()[2:]):
                    rcs = line.strip().split()[2].strip()
                    sheet.write(j, 0, rcs)#在sheet的第j+2行第1列中写入一个rcs 
                    excel.save(xls_path+filename[:-3]+'xls')

通过上面的代码就可以实现保存分excel的功能,并保存在“origin_data1”文件夹中:

这里写图片描述

第二步,对“分excel”通过设置提取的角度来读取相关数据,并写入另一个excel中:

#接上
    y='F:\\exc_py\\'
    n=Workbook()
    new = n.add_sheet('jointdata',cell_overwrite_ok=True)    
    for parent, dirnames, filenames in os.walk(xls_path):
        l=len(filenames)-2#因为此时filenames是一个数组,所有可以通过len返回文件夹中的文件个数,
                          #由于包含了两个Py文件,所有要去掉(至于运行时py文件和批处理文件为什
                          #么要和这些xls文件在一起才能运行,一直没弄明白。希望懂的大神,不吝赐教。
        j=1
        for filename in filenames: 
            data = xlrd.open_workbook(filename)
                          #j=filenames.index(filename)+1
                          #这个函数返回打开的xls文件的索引号,       
                          #但是由于文件夹中有Python文件,还是由于其他的未知原因。
                          #尝试之后,不能成功运行,放弃这个函数。
            table = data.sheets()[0]            
            for i in range(int(threadhold_input)+1):
                  rcs1=table.row_values(i)
                  new.write(i,j,rcs1)
            j+=1
            if j >l:      #将限制条件与文件格式l关联,就可以实现多个文件的自动处理
               break
    for d in range(int(threadhold_input)+1):
        new.write(d,0,d)       
    n.save(y+'jointdata.xls')  #将生成的jiontdata文件单独保存在另一个文件夹中,
                               #这样可以避免在上一步处理excel文件时,出现个数变更问题      

上面代码实现了对上面每个excel数据的选择与合并:

这里写图片描述

代码部分就是这样子的了。

需要说明的是最后的Python文件放在“origin_data1”文件夹中,不然不能产生“jointdata”excel文件,具体原因我也不太清除(希望各路大神不吝赐教),设置的角度大小不能超过4组数据角度的最小范围。如果从cmd窗口中运行Python文件还是比较麻烦的,所有我写了一个批处理文件,可以通过txt格式打开,修改角度范围:

这里写图片描述

这里写图片描述

涉及的文件夹及文件如下:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

最后附一张通过origin导入代码生成的“jointdata.xls”而绘制的曲线(横坐标是角度(0-90),纵坐标是4组rsc数据):

这里写图片描述

第一次写技术类博客,资质尚浅。希望各路技术大神不吝赐教。如青眼有加,愿共同探讨学习Python数据处理问题。QQ:15298063683(非诚勿扰)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hust_a/article/details/51944000

智能推荐

记Linux中摄像头的坑 cheese no device found-程序员宅基地

由于需要将自己的系统换成了linux(我是单linux系统,并不是虚拟机),之后面试需要用到摄像头,但是面试的网站一直提示找不到设备,然后我就惯性思维认为是驱动问题,关于linux的驱动网上的答案真的是一头雾水后来在stackoverflow上看到一个回答:Do you have a physical ON/OFF switch for webcam for example<F10>吐了,真的,直接按<F8>问题解决(F8上的图标就是摄像头图标)...

Vector 的拷贝构造函数_vector的拷贝构造函数-程序员宅基地

大家都知道拷贝构造函数调用的常见情形包括1.函数参数传递,函数实参到形参的过程中调用拷贝构造2.函数返回,函数返回一个对象时会调用拷贝构造函数3.对象定义时赋值 如 A a=b 这里b也是类A的一个对象vector中保存了很多对象的拷贝,当vector调用拷贝构造函数时,容器里面的对象都会被拷贝一份到新的容器里,如果容器中对象数目比较多,则这样的开销是十分昂贵的。但是看到一_vector的拷贝构造函数

JAVA8--Stream流-程序员宅基地

Stream流在JAVA8中添加Stream,这个真的是一个好东西。学习使用Stream会有效提高开发效率。究竟流有什么用呢?简单来说就是从数据源当中处理操作并输元素序列的一个东西,好像说得不太好。来段代码看看吧!我们有一个列表,里面筛选出女同学放到另外一个列表当中,以前我们是这样做的。先给出一个实体Student类(这个实体类会在例子当中使用)public class Studen...

asp.net 注册、卸载iis,iis重启命令_server2016 iis卸载步骤-程序员宅基地

注册:1、开始--运行--cmd2、执行“C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i ”卸载:1、开始--运行--cmd2、执行“C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -u ”重启:_server2016 iis卸载步骤

android如何动态添加控件位置,android开发中 linearlayout中如何将子控件动态插入指定的位置?...-程序员宅基地

匿名用户1级2018-06-02 回答LinearLayout是线性布局控件,它包含的子控件将以横向或竖向的方式排列,按照相对位置来排列所有的widgets或者其他的containers,超过边界时,某些控件将缺失或消失。因此一个垂直列表的每一行只会有一个widget或者是container,而不管他们有多宽,而一个水平列表将会只有一个行高(高度为最高子控件的高度加上边框高度)。LinearLay..._android linearlayout 加入 绝对位置 按钮

气象雷达在民航中的运用_气象雷达属于民用机场-程序员宅基地

气象雷达是雷达技术的重要组成部分。中国民航事业在新中国成立的半个多世纪,得到了蓬勃的发展,尤其在改革开放后,更是开辟了更多的航线,运量也是呈几何倍的增长。如今的民用航空运输业,几乎都可以用“安全第一,经济至上”来概括行业的运营宗旨。因为航空运输都是在空中运行,而大气的瞬息万变对民航运输的安全会产生极大的影响,每年全球大概三分之一的飞行事故都与天气有关,如何更好地利用气象条件降低航空公司的成..._气象雷达属于民用机场

随便推点

为什么电磁炉加热一会就停了 电磁炉加热原理与维修技巧一点通_电磁炉电路图讲解_金灶a818主板维修-程序员宅基地

电路图简介: 家用电磁炉使用时间久后,难免出现这样那样的问题,比如接上外接电源却开不了机、电磁炉加热一段时间后自动停止工作、炉子间歇性一会加热一会停止等等问题,今天就给大家详细讲下电磁炉加热一会就停了碰到这样的使用情况,我们应该怎么去解决? 家用电磁炉使用时间久后,难免出现这样那样的问题,比如接上外接电源却开不了机、电磁炉加热一段时间后自动停止工作、炉子间歇性一会加热一会停止等等问题,今天就给大家详细讲下电磁炉加热一会就停了碰到这样的使用情况,我们应该怎么去解决?    电磁炉是对于我们生活_金灶a818主板维修

BER_TLV格式简介-程序员宅基地

2019独角兽企业重金招聘Python工程师标准>>> ...

中缀表达式 转换为 前缀 后缀表达式_中缀表达式转前缀表达式代码python-程序员宅基地

中缀转后缀表达式考虑表达式 A + B * C。A B C * +是等价的后缀表达式。 我们已经注意到,操作数 A,B 和 C 保持在它们的相对位置。只有操作符改变位置。再看中缀表达式中的运算符。从左到右出现的第一个运算符为 +。 然而,在后缀表达式中,+ 在结束位置,因为下一个运算符 * 的优先级高于加法。 原始表达式中的运算符的顺序在生成的后缀表达式中相反。当我们处理表达式时,操作符必须保存在某_中缀表达式转前缀表达式代码python

十分钟轻松让你认识ASP.NET MVC6-程序员宅基地

这篇文章说明下如何在普通编辑器下面开发mvc6应用程序。上篇文章: 十分钟轻松让你认识ASP.NET 5(MVC6)首先安装mvc6的nuget包: 可以看到在project.json文件中添加了MVC6的引用:1.使用中间件在ASP.NET 5中,DI是强烈推荐使用的。所以.NET团队推出了一个可以适配主流.NET的IoC框架的DI组件(Microsoft.Fra...

OpenCV添加中文(五)-程序员宅基地

OpenCV添加文字的方法putText(...),添加英文是没有问题的,但如果你要添加中文就会出现“???”的乱码,需要特殊处理一下。下文提供封装好的(代码)方法,供OpenCV添加中文使用。 效果预览实现思路使用PIL的图片绘制添加中文,可以指定字体文件,那么也就是说使用PIL可以实现中文的输出。有思路之后,接下来的工作就简单了。OpenCV图片格式转换成...