# -*- coding:utf-8 -*-
'''
从11c开始提取
'''
import re
import numpy as np
import os
year = '17A'
ss="./data/edmd/"
# filename=ss+"/EDMDI1.17A"
try:
os.rename(ss+"/EDMDI1.17A",ss+"/EDMDI1.txt")
except:
pass
f1=open(ss+"/EDMDI1.txt")
p1=re.compile(r"^(?:\s{3}|X\s{2}|\W\s{2})([A-Z]{6})\s.+\n")
list_tag=list()
for line in f1.readlines():
# print(line)
match1=re.findall(p1,line)
# print(match1)
if match1:
for j in match1:
list_tag.append(j)
# filename_w1= ss+'%s'%list_tag[i]
print(list_tag)
for i in range(len(list_tag)):
try:
os.rename(ss+'%s_D.17A'%list_tag[i],ss+'%s.txt'%list_tag[i])
except:
break filename_w= ss+'/new/%s_w.txt'%list_tag[i]
if os.path.exists(filename_w):
os.remove(filename_w)
# import os # os.rename('./data/CODECO_D.02A','./data/CODECO_D.txt')
filename_r = ss+'%s.txt'%list_tag[i] # txt文件和当前脚本在同一目录下,所以不用写具体路径
#00010 UNH Message header M 1
pattern1 = re.compile(r"(^\d{5})\s{3}[A-Z]{3}.+[CM]\s{3}\d*\s{1,}\|{0,}\n")#
pattern1_2 = re.compile(r"^\d{5}\s{3}([A-Z]{3}).+[CM]\s{3}\d*\s{1,}\|{0,}\n")#UNH
pattern1_3 = re.compile(r"^\d{5}\s{3}[A-Z]{3}(.+)[CM]\s{3}\d*\s{1,}\|{0,}\n")#Message header
pattern1_4 = re.compile(r"^\d{5}\s{3}[A-Z]{3}.+([CM])\s{3}\d*\s{1,}\|{0,}\n")#C
pattern1_5 = re.compile(r"^\d{5}\s{3}[A-Z]{3}.+[CM]\s{3}(\d*)\s{1,}\|{0,}\n")#
#pattern2 = re.compile(r"^\d{5}.+Segment\sgroup\s(\d)*.+[CM]\s{3}\d*\-+\+\n" )#+结尾
#00050 ---- Segment group 1 ------------------ C 9----------------+
pattern4_1 = re.compile(r"(^\d{5}).+Segment\sgroup\s\d*.+[CM]\s{3}\d*.+\n")
pattern4_2 = re.compile(r"^\d{5}.+Segment\sgroup\s(\d*).+[CM]\s{3}\d*.+\n")
pattern4_3 = re.compile(r"^\d{5}.+Segment\sgroup\s\d*.+([CM])\s{3}\d*.+\n")
pattern4_4 = re.compile(r"^\d{5}.+Segment\sgroup\s\d*.+[CM]\s{3}(\d*).+\n")
#匹配每组的单独结尾的一行即没有Segment group的以+、+|、+||、+|||……结尾的的每个字段
#如00280 RNG Range details C 1---------------+|
pattern5_1 = re.compile(r"(^\d{5})\s{3}[A-Z]{3}.+[CM]\s{3}\d*\-+\+{1,10}\|{0,20}\n" )
pattern5_2 = re.compile(r"^\d{5}\s{3}([A-Z]{3}).+[CM]\s{3}\d*\-+\+{1,10}\|{0,20}\n" )
pattern5_3 = re.compile(r"^\d{5}\s{3}[A-Z]{3}.+([CM])\s{3}\d*\-+\+{1,10}\|{0,20}\n" )
pattern5_4 = re.compile(r"^\d{5}\s{3}[A-Z]{3}.+[CM]\s{3}(\d*)\-+\+{1,10}\|{0,20}\n" )
#以下是确定层级关系
#匹配每组的单独结尾的一行即没有Segment group的以+、+|、+||、+|||……结尾的
pattern5 = re.compile(r"^\d{5}\s{3}[A-Z]{3}.+[CM]\s{3}\d*\-+\+\|{0,10}\n" )
#匹配每组的开头一行即有Segment group的以+、+|、+||、+|||……结尾的
pattern2_1 = re.compile(r"^\d{5}.+Segment\sgroup\s(\d*).+[CM]\s{3}\d*\-+\+\n" )#+结尾
pattern2_2 = re.compile(r"^\d{5}.+Segment\sgroup\s(\d*).+[CM]\s{3}\d*\-+\+\|\n" )#+|结尾
pattern2_3 = re.compile(r"^\d{5}.+Segment\sgroup\s(\d*).+[CM]\s{3}\d*\-+\+\|\|\n" )#+||结尾
pattern2_4 = re.compile(r"^\d{5}.+Segment\sgroup\s(\d*).+[CM]\s{3}\d*\-+\+\|\|\|\n" )
pattern2_5 = re.compile(r"^\d{5}.+Segment\sgroup\s(\d*).+[CM]\s{3}\d*\-+\+\|\|\|\|\n" )
pattern2_6 = re.compile(r"^\d{5}.+Segment\sgroup\s(\d*).+[CM]\s{3}\d*\-+\+\|\|\|\|\|\n" )
pattern2_7 = re.compile(r"^\d{5}.+Segment\sgroup\s(\d*).+[CM]\s{3}\d*\-+\+\|\|\|\|\|\|\n" )
#匹配有同时多个组同时结束的情况,即以++、++|、++||……++、++|、++||……等结尾的
pattern3_1 = re.compile(r"^\d{5}.+[CM]\s{3}\d*\-+\+{2}\|{0,20}\n")# 匹配++、++|、++||……等结尾
pattern3_2 = re.compile(r"^\d{5}.+[CM]\s{3}\d*\-+\+{3}\|{0,20}\n")# 匹配+++、+++|、+++||……等结尾
pattern3_3 = re.compile(r"^\d{5}.+[CM]\s{3}\d*\-+\+{4}\|{0,20}\n")
pattern3_4 = re.compile(r"^\d{5}.+[CM]\s{3}\d*\-+\+{5}\|{0,20}\n")
pattern3_5 = re.compile(r"^\d{5}.+[CM]\s{3}\d*\-+\+{6}\|{0,20}\n")
pattern3_6 = re.compile(r"^\d{5}.+[CM]\s{3}\d*\-+\+{7}\|{0,20}\n") flag = 0
#listgr中第一个不为0的点
pos = -1
listgr =[0,0,0,0,0,0,0,0,0,0] fr = open(filename_r)
w2 = open(filename_w,'a')#a代表追加 w代表重写
for line in fr.readlines():
matcher1 = re.findall(pattern1,line)
matcher1_2 = re.findall(pattern1_2,line)
matcher1_3 = re.findall(pattern1_3,line)
matcher1_4 = re.findall(pattern1_4,line)
matcher1_5 = re.findall(pattern1_5,line)
matcher2_1 = re.findall(pattern2_1,line)
matcher2_2 = re.findall(pattern2_2,line)
matcher2_3 = re.findall(pattern2_3,line)
matcher2_4 = re.findall(pattern2_4,line)
matcher2_5 = re.findall(pattern2_5,line)
matcher2_6 = re.findall(pattern2_6,line)
matcher2_7 = re.findall(pattern2_7,line)
matcher3_1 = re.findall(pattern3_1,line)
matcher3_2 = re.findall(pattern3_2,line)
matcher3_3 = re.findall(pattern3_3,line)
matcher3_4 = re.findall(pattern3_4,line)
matcher3_5 = re.findall(pattern3_5,line)
matcher3_6 = re.findall(pattern3_6,line)
matcher4_1 = re.findall(pattern4_1,line)
matcher4_2 = re.findall(pattern4_2,line)
matcher4_3 = re.findall(pattern4_3,line)
matcher4_4 = re.findall(pattern4_4,line)
matcher5 = re.findall(pattern5,line)
matcher5_1 = re.findall(pattern5_1,line)
matcher5_2 = re.findall(pattern5_2,line)
matcher5_3 = re.findall(pattern5_3,line)
matcher5_4 = re.findall(pattern5_4,line) if matcher4_1!=[]:
w2.write("\n")
for j in matcher4_1:
for k in j:
w2.write(k)
if matcher4_2!=[]:
w2.write(",")
#写入parent列
if pos!= -1:
numgr =listgr[pos]
else:
numgr = 0
w2.write("SG"+str(numgr)+",")
for j in matcher4_2:
for k in j:
w2.write(k)
if matcher4_3!=[]:
flag = 3
w2.write(",")
for j in matcher4_3:
for k in j:
w2.write(k)
if matcher4_4!=[]:
w2.write(",")
for j in matcher4_4:
for k in j:
w2.write(k)
if matcher5_1!=[]:
w2.write("\n")
for j in matcher5_1:
for k in j:
w2.write(k)
if matcher5_2!=[]:
w2.write(",")
#写入parent列
if pos!= -1:
numgr =listgr[pos]
else:
numgr = 0
w2.write("SG"+str(numgr)+",")
for j in matcher5_2:
for k in j:
w2.write(k)
if matcher5_3!=[]:
flag = 3
w2.write(",")
for j in matcher5_3:
for k in j:
w2.write(k)
if matcher5_4!=[]:
w2.write(",")
for j in matcher5_4:
for k in j:
w2.write(k)
#确定层级关系,也就是确定listgr
if(matcher5!=[]):
for i in listgr:
if i==0:
pos = listgr.index(i)-1
break
listgr[pos]=0
if (matcher2_1!=[]):
# print "2_1"
for j in matcher2_1:
# print j
if(listgr[0]==0):
listgr[0]=j
else:
listgr[0]=0
# print listgr
if (matcher2_2!=[]):
for j in matcher2_2:
#numgr_d = j
if(listgr[1]==0):
listgr[1]=j
else:
listgr[1]=0
if (matcher2_3!=[]):
for j in matcher2_3:
if(listgr[2]==0):
listgr[2]=j
else:
listgr[2]=0
if (matcher2_4!=[]):
for j in matcher2_4:
if(listgr[3]==0):
listgr[3]=j
else:
listgr[3]=0
if (matcher2_5!=[]):
for j in matcher2_5:
if(listgr[4]==0):
listgr[4]=j
else:
listgr[4]=0
if (matcher2_6!=[]):
for j in matcher2_6:
if(listgr[5]==0):
listgr[5]=j
else:
listgr[5]=0
if (matcher2_7!=[]):
for j in matcher2_7:
if(listgr[6]==0):
listgr[6]=j
else:
listgr[6]=0
if (matcher3_1!=[]):
for i in listgr:
if i==0:
pos = listgr.index(i)-1
break
listgr[pos]=0
listgr[pos-1]=0
if (matcher3_2!=[]):
for i in listgr:
if i==0:
pos = listgr.index(i)-1
break
for k in range((pos-2),(pos+1)):
listgr[k]=0
if (matcher3_3!=[]):
for i in listgr:
if i==0:
pos = listgr.index(i)-1
break
for k in range((pos-3),(pos+1)):
listgr[k]=0
if (matcher3_4!=[]):
for i in listgr:
if i==0:
pos = listgr.index(i)-1
break
for k in range(pos-4,pos+1):
listgr[k]=0
if (matcher3_5!=[]):
for i in listgr:
if i==0:
pos = listgr.index(i)-1
break
for k in range(pos-5,pos+1):
listgr[k]=0
if (matcher3_6!=[]):
for i in listgr:
if i==0:
pos = listgr.index(i)-1
break
for k in range(pos-6,pos+1):
listgr[k]=0
#确定层级关系结束
if (matcher1!=[]):
flag = 1
w2.write("\n")
for j in matcher1:
for k in j:
w2.write(k)
#print listgr
#判断当前lit不为0的位置
for i in listgr:
if i==0:
pos = listgr.index(i)-1
break
if matcher1_2!=[]:
flag = 2
w2.write(",")
#写入parent列
if pos!= -1:
numgr =listgr[pos]
else:
numgr = 0
w2.write("SG"+str(numgr)+",")
for j in matcher1_2:
for k in j:
w2.write(k)
if matcher1_3!=[]:
flag = 3
w2.write(",")
for j in matcher1_3:
for k in j:
w2.write(k)
if matcher1_4!=[]:
flag = 4
w2.write(",")
for j in matcher1_4:
for k in j:
w2.write(k)
if ((matcher1_5!=[])and(flag ==4)):
flag = 5
w2.write(",")
for j in matcher1_5:
for k in j:
w2.write(k) w2.close( )
fr.close() f2_w= open(ss+'/new/%s.txt'%year,'a') for i in range(len(list_tag)):
f2_r = open(ss+'/new/%s_w.txt'%list_tag[i])
for line in f2_r:
# for j in line:
f2_w.write(year+','+line)
f2_r.close()
print("--%i--is ok"%i)
f2_w.close() # if __name__ == '__main__': """
特殊情况 """

python文件操作,读取,修改,合并的更多相关文章

  1. Python文件操作:文件的打开关闭读取写入

    Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...

  2. Python基础篇【第2篇】: Python文件操作

    Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...

  3. [Python学习笔记][第七章Python文件操作]

    2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...

  4. 初学Python——文件操作第二篇

    前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...

  5. day8.python文件操作

    打开和关闭文件 open函数 用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. file = open(file_name [, access_ ...

  6. 小学生都能学会的python(文件操作)

    小学生都能学会的python(文件操作) 1. open("文件路径", mode="模式", encoding="编码") 文件的路径: ...

  7. 第十二章 Python文件操作【转】

    12.1 open() open()函数作用是打开文件,返回一个文件对象. 用法格式:open(name[, mode[, buffering[,encoding]]]) -> file obj ...

  8. Python文件操作与函数目录

    文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 ...

  9. Python之路Python文件操作

    Python之路Python文件操作 一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r&qu ...

  10. python 文件操作 r w a

    python基础-文件操作   一.文件操作 对文件操作的流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件       打开文件时,需要指定文件路径和以何等方式打开文件, ...

随机推荐

  1. c++ static成员

    static 成员通常不能在类的定义体重初始化 有一种例外,const static成员可以在定义体内初始化,并且可以用于构造函数 将函数声明为const表示该函数不能修改其所属的对象

  2. denyhosts配置详解

    DenyHosts官方网站为:http://denyhosts.sourceforge.net 用DenyHosts可以阻止试图猜测SSH登录口令,它会分析/var/log/secure等日志文件,当 ...

  3. mysql物理备份

    原本以为直接将data文件夹下每个数据库对应的文件夹拷贝到新的MySQL的data文件夹就可以了,其实不然. 这样做有几个问题: 1.如果是用了引擎的表,还需要复制ibdata文件,并且frm文件所在 ...

  4. RN项目中关于父子组件的通信

    子组件向父组件传递数据 子控件中在相应的函数中.通过props.coallback的回调通知父组件. 父组件调用callback属性时行 绑定,并在方法中去解析使用获取到的值 . //子控件: < ...

  5. java小知识点简单回顾

    1.java的数据类型分为两种:简单类型和引用类型(数组.类以及接口).注意,java没有指针的说法,只有引用.简单类型的变量被声明时,存储空间也同时被分配:而引用类型声明变量(对象)时,仅仅为其分配 ...

  6. 解决 listView gridView 与ScrollView嵌套时的冲突

    package com.xqx.fight; import android.app.Activity; import android.os.Bundle; import android.view.Me ...

  7. 零基础学习hadoop到上手工作线路指导(编程篇)

    问题导读: 1.hadoop编程需要哪些基础? 2.hadoop编程需要注意哪些问题? 3.如何创建mapreduce程序及其包含几部分? 4.如何远程连接eclipse,可能会遇到什么问题? 5.如 ...

  8. 3.说一下你了解的弹性FLEX布局.

    页面布局一直都是web应用样式设计的重点 我们传统的布局方式都是基于盒模型的 利用display.position.float来布局有一定局限性 比如说实现自适应垂直居中 随着响应式布局的流行,CSS ...

  9. spring mvc leaning

    解读 web.xml文件 <servlet>-----配置前端控制器的servlet <servlet-name>springMVC</servlet-name> ...

  10. CreateThread

    CreateThread(NULL,0,ReportResultThread,this,0,&g_dwThreadId) 2. 参数说明: 第一个参数 lpThreadAttributes 表 ...