24小时热门版块排行榜    

查看: 1253  |  回复: 26

qingkonggzc

银虫 (小有名气)

[求助] 望各路大神不吝赐教:不同文件夹下的文本内容的提取计算,文件较多 已有4人参与

说明:本人有7天的数据(数据存放在data_hav文件夹下),每天的数据占用一个文件夹(236,237,...,242,文件中均是.hav文件,见附图),我想依次打开存放每天数据的文件夹,对里面的测站内容进行提取运算,以图中G01(每天每个文本中都会出现)为例,计算方法是对每天所有测站中G01的(#have求和)除以(#reprt求和),即求个比列,7天可计算出7个比例值,并像这样将这7个数依次写在out.txt中,写成一行如 95  94  91  86  86 87 94,如果比列为0,就用NAN标识,如 95  94  91  86  86 87 NAN
下面是本人的一些问题和想法:
1)如何依次打开不同的文件夹?使用字符串替换文件名?
2)可先对每天文件夹里面的所有测站名进行提取(每天有多少测站不固定),存放到一个txt中,然后再根据txt依次打开文本对内容提取存放到数组中,需对G01—G32,C01—C14,R01—R24均如G01一样求个比列,然后一行行的写到out.txt中,数组该如何构造,如何提取数据呢?
3)使用type构造一个类似于结构体的数组存放数据?
本人刚接触Fortran,很多东西都不会,这个问题已经困扰本人好几天了,不知该如何下手,望各路大神予以指导,方便的话还请写几行代码给予参考,谢谢~~~望各路大神不吝赐教:不同文件夹下的文本内容的提取计算,文件较多
7天数据.png


望各路大神不吝赐教:不同文件夹下的文本内容的提取计算,文件较多-1
每天数据里面的文本.png


望各路大神不吝赐教:不同文件夹下的文本内容的提取计算,文件较多-2
hav文件内容.png


望各路大神不吝赐教:不同文件夹下的文本内容的提取计算,文件较多-3
hav文件内容.png
回复此楼

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : data_hav.zip
  • 2015-05-24 21:27:42, 24.04 K

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

ihnlaoyao

银虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
qingkonggzc: 金币+10, ★★★很有帮助 2015-05-28 10:19:31
引用回帖:
6楼: Originally posted by qingkonggzc at 2015-05-26 10:25:16
你好,这个是可以和Fortran混合使用吗?没接触过Python,之前都是用MATLAB的,最近才开始学习Fortran...

你说之前用过Matlab 那太好了 再学Python就会很简单的  这两个语法还是挺像的。
我没有太多时间写这个程序,我的大致思路是:
1、利用Python的listdir(路径名)函数,可实现获取参数所指的路径名下的所有文件。该函数的结果是把获取到的所有文件名放在一个列表中,然后就你可以遍历这个列表 逐一地利用open()函数去读文件的内容,当然根据你文件的结构,我觉得肯定是要逐行去读的
2、读到一行的数据后,可以利用正则表达式的方式从中提取出你需要的数据,然后进行累加。
3、当某一天的所有文件都处理完了,把累加器变量中的值拿出来进行你说的除法运算,那么当天的结果就出来了。
7楼2015-05-26 21:02:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ihnlaoyao

银虫 (小有名气)

引用回帖:
8楼: Originally posted by qingkonggzc at 2015-05-27 20:39:36
谢谢你,就是我这部分程序是一个大循环里面的一部分,用python能和Fortran混合使用吗 ?...

不知道 我不了解Fortran
9楼2015-06-02 14:18:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jiangxingge

金虫 (正式写手)

【答案】应助回帖

我觉得你的技术思路是可行的。
1,遍历所有文件的 问题。为了在FORTRAN中遍历,可以利用 SYSTEM 子程序 (可查看CVF帮助)
    由于你已知 236-242的文件夹名字,所以,可以建立一个数组,并把这些名字预先赋值(或者写在一个文本中再读取)
   character*200 pathname(7)
data pathname/'d:\DATA_HAV\236\','d:\DATA_HAV\237\',。。。。'd:\DATA_HAV\242\'

对 7天进行循环
循环中 ,首先提取这一天的 文件列表
   call sysytem(' DIR '//pathname(i)(1:16)//'*.hav   > a.txt') ! 16 是pathname中字符的长度
注意 :这句话 产生了 一个 a.txt 的文件 ,文件的 内容 像下面的样子
驱动器 D 中的卷没有标签。
卷的序列号是 0004-5856

d:\data_hav\242 的目录

2015/01/29  09:41             4,316 chdu2370.hav
2015/01/29  09:41             4,316 gua12370.hav
               2 个文件          8,632 字节
               0 个目录 85,285,617,664 可用字节

然后 你读取 这个文件,就可以 得知 这一天的 所有文件名,当然也知道 这一天 有几个文件。于是 就可以对每一个 文件进行操作。
11楼2015-06-05 15:36:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jiangxingge

金虫 (正式写手)

【答案】应助回帖

2,关于内部数组的 问题。根据你提供的数据,实际上 有几天,每天有几个文件,对于数组是 没有影响的 ,因为 你只是求平均而已,不管几个文件,平均结果 是一个。数组跟每一个文件中的 内容有关,比如 G01-G32,还有 C01-C32,要对每一个需要计算的 准备数组。
建议 建立二位数组,一个维度就是 32,一个就是 针对 GCRE 4个,由于计算平均值,所以需要 一个数加总和,一个数记个数
dimension SV(32,4),NV(32,4)
然后读取每一个文件,每次剔除不需要(无法)计算的,把需要计算的 加起来,个数也记住。到全部结束,除一下得到平均值。 如果需要其他计算,也是 类似的思路,只不过多开几个数组而已。
12楼2015-06-05 15:45:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jiangxingge

金虫 (正式写手)

【答案】应助回帖

这个思路是可以做到的。但是程序有点繁。
但是由于你说“这是一个大循环里面的一部分,是在Fortran下面编的,”
所以 只好这样做。

» 本帖已获得的红花(最新10朵)

13楼2015-06-05 15:51:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

me_yu

木虫 (正式写手)

【答案】应助回帖

python2.7.6 脚本实现,看下是否符合你的需求,百度盘连接如下:
链接: http://pan.baidu.com/s/1jGH1KiE 密码: q3c9

» 本帖已获得的红花(最新10朵)

听,寂静的夜里,田野里蛙声和虫鸣,好不欢快!
14楼2015-06-05 20:32:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

me_yu

木虫 (正式写手)

【答案】应助回帖

引用回帖:
19楼: Originally posted by qingkonggzc at 2015-06-06 11:34:17
对了,我这个是在Windows下面编写的,你这个python脚本编写的是在什么系统下写的啊,我回头还要再把它放到Linux下运行,这样会不会出问题啊?...

嗯,win7 下 python 2.7.6 写的脚本
Linux 下应该也能运行的,python 跨平台的

» 本帖已获得的红花(最新10朵)

听,寂静的夜里,田野里蛙声和虫鸣,好不欢快!
20楼2015-06-06 11:50:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

me_yu

木虫 (正式写手)

【答案】应助回帖

之前的两个(havesum,reprtsum)加和放到循环外了
这个脚本没什么可以注释的,就是文件的读取拆分字符串的拼接以及数据转换而已,下面链接是我修改过的脚本。比较难理解的我觉得应该是在数据存储上面,我这里用字典是这样实现的,即:key:[have+','+reprt+','],比如 G24:'162,188,162,188,162,188,162,188,162,188,' 这条数据就包括了所有文件的 G24 行的have和reprt数据(字典中的值已逗号为分隔符,单数列下标存放have数据,双数列存放reprt数据),之后就是汇总及求比例了。脚本中你可以逐个释放print前的注释,调试看下数据的变化的。

链接: http://pan.baidu.com/s/1yfyWI 密码: 1mkc

» 本帖已获得的红花(最新10朵)

听,寂静的夜里,田野里蛙声和虫鸣,好不欢快!
23楼2015-06-08 12:52:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

qingkonggzc

银虫 (小有名气)

恳请各位大神给点帮助意见
2楼2015-05-25 10:23:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jerkwin

专家顾问 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
用shell吧, 别折腾fortran了
3楼2015-05-26 01:10:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ihnlaoyao

银虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
用Python吧 遍历目录下的文件极其方便

[ 发自手机版 http://muchong.com/3g ]
4楼2015-05-26 09:51:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qingkonggzc

银虫 (小有名气)

引用回帖:
3楼: Originally posted by jerkwin at 2015-05-26 01:10:03
用shell吧, 别折腾fortran了

你好,这是一个大循环里面的一部分,是在Fortran下面编的,可以这样和脚本嵌合在一块使用吗?因为我脚本语言也没怎么接触过,所以不太懂。。。
5楼2015-05-26 10:23:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qingkonggzc

银虫 (小有名气)

引用回帖:
4楼: Originally posted by ihnlaoyao at 2015-05-26 09:51:54
用Python吧 遍历目录下的文件极其方便

你好,这个是可以和Fortran混合使用吗?没接触过Python,之前都是用MATLAB的,最近才开始学习Fortran
6楼2015-05-26 10:25:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qingkonggzc

银虫 (小有名气)

引用回帖:
7楼: Originally posted by ihnlaoyao at 2015-05-26 21:02:28
你说之前用过Matlab 那太好了 再学Python就会很简单的  这两个语法还是挺像的。
我没有太多时间写这个程序,我的大致思路是:
1、利用Python的listdir(路径名)函数,可实现获取参数所指的路径名下的所有文件。该 ...

谢谢你,就是我这部分程序是一个大循环里面的一部分,用python能和Fortran混合使用吗 ?
8楼2015-05-27 20:39:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

qingkonggzc

银虫 (小有名气)

引用回帖:
9楼: Originally posted by ihnlaoyao at 2015-06-02 14:18:49
不知道 我不了解Fortran...

恩,好的,谢谢你啦
10楼2015-06-04 21:16:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 qingkonggzc 的主题更新
信息提示
请填处理意见