zoukankan      html  css  js  c++  java
  • Python学习笔记五(遍历读取提取写入文件)

    #Python打开读取一个文件内容,然后写入一个新的文件中,并对某些字段进行提取,写入新的字段的脚本。这是在工作中,需拼装大量的8543报文,原报文只读,不可写入,且也要对原报文进行提取某字段、新增报文头字段,删除某字段等操作,希望大家有用的着的地方,与大家共同学习进步!

     1 import os
     2 import re
     3 
     4 def get_filelist(dir):
     5     os.getcwd() #get current work direction.
     6     os.chdir(path) #change direction
     7     Filelist = []
     8     for home, dirs, files in os.walk(path):
     9         for filename in files:
    10             #文件名列表,包含完整路径
    11             #Filelist1.append(os.path.join(home, filename))
    12             #文件名列表,只包含文件名
    13             Filelist.append(filename)
    14     return Filelist
    15 
    16 def main():
    17     n=0
    18     for file in filelist:
    19         os.getcwd() #get current work direction.
    20         os.chdir(path) #change direction
    21         with open(file,mode='r',encoding='utf-8') as f1:
    22             data=f1.read()
    23             f1.close()
    24 
    25             #切换到新的路径下
    26             os.getcwd() #get current work direction.
    27             os.chdir(newpath) #change directio
    28             
    29             #读取文件的内容写入到新file文件下
    30             with open(file,mode='w',encoding='utf-8') as f2:
    31                 n=n+1
    32                 ##提取字段 拼装写入##
    33                 #系统简称大写
    34                 SYST=file[file.find("")+0:file.find("")+4].upper()
    35                 #SYST=SYST.upper()
    36                 #print(SYST)
    37                 #发送行号
    38                 SEND1234SEND="660000000066"
    39                 #接收行号
    40                 RECV1234RECV="880000000088"
    41                 #删除正则匹配的一行
    42                 data = re.sub(r'<!--.*-->
    ', "", data)
    43                 #报文类型
    44                 MSGTYPE0MSGTYPE=data[data.find("tech:xsd:")+9:data.find("tech:xsd:")+24]
    45                 #MsgID
    46                 MSGRID0000MSGRID=data[data.find("<MsgId>")+7:data.find("<MsgId>")+23]
    47                 #拼装的报文头
    48                 head="{H:02"+SEND1234SEND+"  "+SYST+RECV1234RECV+"  "+SYST+"00000000000001XML"+MSGTYPE0MSGTYPE+"     "+MSGRID0000MSGRID+"    "+MSGRID0000MSGRID+"    3D         }"
    49                 
    50                 f2.write(head+'
    ')
    51                 f2.write(data)
    52                 f2.close()
    53 
    54                 if os.path.isfile(file):
    55                     print(file,"转换完成!")
    56                 else:
    57                     print(file,"转换失败!")
    58 
    59     print("共转换个文件数:",n)
    60 
    61 
    62 if __name__ == '__main__':
    63     path='E:\办公文档\LR项目资料\XML格式报文示例'
    64     newpath='E:\Python_test\读取文件\newfiles'
    65 
    66     #path=input("请输入文件路径:")
    67     #newpath=input("请输入转换后新文件路径:")
    68 
    69     filelist = get_filelist(dir)
    70     #print(filelist)
    71     #不用加引号,如果是多级目录,只判断最后一级目录是否存在
    72     if os.path.isdir(newpath):
    73         #print ('dir exists')
    74         pass
    75     else:
    76         #print ('dir not exists')
    77         os.mkdir(newpath) 
    78 
    79     main()
    80     
    View Code

     可参考:shell读取文件写入新文件

  • 相关阅读:
    Struts2知多少(1) Struts2 MVC架构
    MyBatis知多少(26)MyBatis和Hibernate区别
    MyBatis知多少(26)调试
    MyBatis知多少(25)动态SQL
    MyBatis知多少(24)存储过程
    MyBatis知多少(23)MyBatis结果映射
    MyBatis知多少(22)MyBatis删除操作
    MyBatis知多少(21)更新操作
    MyBatis知多少(20)MyBatis读取操作
    MyBatis知多少(19)MyBatis操作
  • 原文地址:https://www.cnblogs.com/zwh-Seeking/p/11712229.html
Copyright © 2011-2022 走看看