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

智能推荐

IO流之FileWriter常见错误总结(经验教训)-程序员宅基地

IO流不可谓不熟,但是一旦自己动手写,总是会出一些莫名其妙的错,先看代码:import java.io.*;public class TestIO { public static int i = 0; public static void main(String[] args) throws IOException{ FileReade..._msg:code:[filewriter-12]

Spring Cloud Gateway整合nacos实战(三)_spring-cloud-starter-gateway-程序员宅基地

Spring Cloud GateWay是Spring Cloud的⼀个全新项⽬,⽬标是取代Netflix Zuul,它基于Spring5.0+SpringBoot2.0+WebFlux(基于⾼性能的Reactor模式响应式通信框架Netty,异步⾮阻塞模型)等技术开发,性能⾼于Zuul,官⽅测试,GateWay是Zuul的1.6倍,旨在为微服务架构提供⼀种简单有效的统⼀的API路由管理⽅式。_spring-cloud-starter-gateway

一次函数调用过程对堆栈的逆向分析之旅-程序员宅基地

阅读需要有一点汇编基础,源代码如下#include "stdafx.h"int plus(int x, int y){int z = 2;return x + y + z;}int main(){int c = plus(3, 4);return 0;}用VS的反汇编找到main函数的地址0xF216E0将程序载入OD,到达0xF

阅读笔记 - ---01-程序员宅基地

  一、阅读所得  软件=程序+软件工程  程序:源程序,程序对数据进行操作。  一个复杂的软件不但要有合理的软件架构、软件设计与实现,还有来描述各个程序文件之间的依赖关系,编译参数、链接参数的一些文档。  我们需要进行源代码管理、配置管理、软件测试,从软件的 需求分析出发,做好用户体验分析、软件维护。  软件开发的不同阶段    1.玩具阶段    2.业余爱好阶段...

ida7.0闪退--Fatal error before kernel init_ida 闪退-程序员宅基地

今天不知道操作了啥(运行了几个idapython 的脚本,需要遍历Functions和FuncItems所以算是耗时脚本)。我的系统是macos 10.12.3 IDA版本是7.0,当关闭ida后再点击图标打开就出现闪退现象,只是图标亮了下就没了下文。因为图标点击没有错误输出,所以在安装目录找到了ida的可执行文件,直接终端运行得到错误信息Fatal error before kernel ini..._ida 闪退

随便推点

Linux C 读取文件夹下所有文件(包括子文件夹)的文件名_c读取文件夹下所有文件-程序员宅基地

地址:http://www.cnblogs.com/xudong-bupt/p/3504442.htmlLinux C 读取文件夹下所有文件(包括子文件夹)的文件名本文:http://www.cnblogs.com/xudong-bupt/p/3504442.htmlLinux C 下面读取文件夹要用到结构体struct dirent,在头#include 中,如_c读取文件夹下所有文件

python调试怎么添加断点_Python PyCharm如何进行断点调试_秦晓珊的博客-程序员宅基地

编辑器不等于IDE(集成开发环境),开发python程序,不是只有一种print()打印输出调试。术业有专攻,于人如此,于一个软件也是如此。让专业的软件做专业的事。以上两点得出的结论:PyCharm我们以如下的一种常见错误,来演示如何通过PyCharm断点追踪的方式发现程序中的错误:def foo(bar=[]):bar.append('bar')return bar>>>foo...

Hibernate【映射】知识要点-程序员宅基地

前言前面的我们使用的是一个表的操作,但我们实际的开发中不可能只使用一个表的...因此,本博文主要讲解关联映射集合映射需求分析:当用户购买商品,用户可能有多个地址。数据库表我们一般如下图一样设计数据库表,一般我们不会在User表设计多个列来保存地址的。因为每个用户的地址个数都不一的,会造成数据冗余创建两张数据表,一张保存着用户的信息,一张保存着地址的信息。地址表使用外键来引用用户表...

UE4开发PSVR游戏流程-程序员宅基地

先与sony的开发者关系部建立联系,展示工作室/公司制作PSVR游戏的构想和计划以及制作实力,如果对方觉得你提供的信息具有说服力,则会提供开发者资格,和你签署NDA,给你租借开发机和测试机(免费)。安装PS4 SDK从官方提供的Playstation DevNet上下载PS4 SDK。因大陆可能墙了PS的IP,可以租用境外的服务器(该服务器ip必须告知sony的联系人,列入其...

特征值分解、奇异值分解、PCA概念整理_奇异值分解的最优阈值-程序员宅基地

本文将分别介绍特征值分解、奇异值分解、及PCA的相关理论概念。文章末尾将给出Householder矩阵变换、QR算法求解特征值、特征向量的代码其中,特征值分解、奇异值分解的相关内容,转载自:http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html考虑到本文50%以上_奇异值分解的最优阈值

Qt学习之路1--简单介绍Qt开发_qt中级开发学习之路-程序员宅基地

大概有四个月没有更新技术博客了,虽然写的还是很菜,我觉得对我还是有用的,在需要时查起来很方便,刚好最近在公司里跟的项目需要用到Qt,趁着机会复习一下之前学的内容,这样也能更快速的阅读项目中的代码,这期间有一个挺长的过程,所以勉励自己从一开始就保存下自己的心得体会,为日后翻阅提供第一手资料..._qt中级开发学习之路