[Python] 抽取文件中指定字符串后面的字符串-2

基于上一个版本的改进https://www.cnblogs.com/FiaFia/p/9361225.html

这样就能把这行文件中需要的信息一个一个提出来,写成CSV,没有的值设为空

还没解决的问题是 newsitem = [tradableid[0],exchange[0],symbol[0],name[0],isin[0],currency,instrumentSubType,country,securityType[0],lotSize[0]]

没有[0]的 在csv里面就显示为["309"],有[0]的在csv里面就是值,会好看一些

如果都设置为[0],如果遇到这一行中没有这个数值,就会报 ‘IndexError: list index out of range‘

之后需要看看用能不能加个lambda 函数判断是否为空,为空就设置为‘’

import csv
import re

def extract_all(filename):
    result =[]

    print(‘Extracting data----‘)

    lines = open(filename, ‘r‘, encoding=‘utf8‘, errors=‘ignore‘).readlines()

    for line in lines:
        if "BDt;" in line:
            tradableid = None
            exchange = None
            symbol = None
            name = None
            isin = None
            currency = None
            instrumentSubType = None
            country = None
            securityType = None
            newsitem = None

            tradableid = re.findall(r";i(.+?);",line)
            exchange = re.findall(r";Ex(.+?);",line)
            symbol = re.findall(r";SYm(.+?);",line)
            name = re.findall(r";NAm(.+?);",line)
            isin = re.findall(r";ISn(.+?);",line)
            currency = re.findall(r";CUt(.+?);",line)
            instrumentSubType = re.findall (r";INt(.+?);",line)
            country = re.findall(r";CNy(.+?);",line)
            securityType = re.findall(r";STy(.+?);",line)
            lotSize = re.findall(r";LSz(.+?);",line)

            newsitem = [tradableid[0],exchange[0],symbol[0],name[0],isin[0],currency,instrumentSubType,country,securityType[0],lotSize[0]]
            result.append(newsitem)

    return result

def writetocsv(newsitems, reportfile):

    print(‘Start writing to csv‘)

    if newsitems:
        with open(reportfile, mode=‘w+‘, encoding=‘utf8‘, errors=‘ignore‘) as csvfile:
            writer = csv.writer(csvfile,lineterminator=‘\n‘)
            writer.writerow([‘TradableID‘,‘Exchange‘,‘symbol‘,‘Name‘,‘isin‘,‘currenty‘,‘instrumentSubType‘,‘country‘,‘securityType‘,‘lotSize‘]) 

            for i in range (0, len(newsitems)):
                writer.writerow(newsitems[i])

    print(‘csv written done‘)
    return

if __name__ == ‘__main__‘:
    filename = ‘XSTO_Stock_BasicData0725‘
    data_file = filename  +‘.tip‘
    reportcsv = ‘BDt_‘ + filename + ‘.csv‘

    newsitemsum = extract_all(data_file)
    writetocsv(newsitemsum, reportcsv)

原文地址:https://www.cnblogs.com/FiaFia/p/9379007.html

时间: 2024-10-27 06:39:03

[Python] 抽取文件中指定字符串后面的字符串-2的相关文章

Python 可视化Twitter中指定话题中Tweet的词汇频率

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-8 @author: guaguastd @name: plot_frequencies_words.py ''' if __name__ == '__main__': #import json # import Counter from collections import Counter # import search from search impor

Python 对Twitter中指定话题的Tweet基本元素的频谱分析

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-9 @author: guaguastd @name: entities_frequency_map.py ''' if __name__ == '__main__': # import Counter from collections import Counter # import visualize from visualize import visua

【译】 AWK教程指南 3计算并打印文件中指定的字段数据

awk 处理数据时,它会自动从数据文件中一次读取一条记录,并会将该记录切分成一个个的字段:程序中可使用 $1, $2,... 直接取得各个字段的内容.这个特色让使用者易于用 awk 编写 reformatter 来改变数据格式. 范例:以数据文件 emp.dat 为例,计算每人应发工资并打印报表. 分析:awk 会自行一次读入一条记录,故程序中仅需告诉 awk 如何处理所读入的数据行. 执行如下命令:($ 表UNIX命令行上的提示符)  $ awk '{ print $2, $3 * $4 }'

根据txt文件中指定的文件名进行文件分类

根据txt文件中指定的文件名进行文件分类: // 根据txt文件中指定的文件名进行文件分类 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <windows.h> #include <io.h> #include <direct.h> #include <string.h> void Remove_End_Char(char a[])

python把文件中的邮箱分类 保存到相应的文件里面

python把文件中的邮箱分类 保存到相应的文件里面(测试数据100W数据时间10秒) #coding:utf-8 import time import linecache def readfile(file):     #读取数据     list_dict = {}     file_data =  [ x.replace('\n','') for x in linecache.getlines(file) if '@' in x ]     #把后缀名组成字典中的keys,按照要求把文件中

Python工程文件中的名词解释---Module与Package的区别

当我们在已有的Python工程文件中创建新的内容是,通常会有两种类型文件供你选择---Module和Package,对于初学者来说会搞不清楚这两种文件直接的关系.这里就来解释一下这两者之间的关系. Module简介:  中文翻译成"模块",所谓的模块其实就是能够独立的完成一组任务的代码集.在Python里面Module一般就是一个独立的.py文件(有时候也可能是多个). Package简介:  中文翻译成"包",在Python中,Package就相当于多个Modul

一个修改文件中指定内容的程序

下面是一个修改文件中指定内容的程序,这里面主要用到了以下几个函数: FILE * fopen(const char * path,const char * mode); size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ; buffer:用于接收数据的内存地址: size:要读的每个数据项的大小,单位为字节: count:要读的数据项的个数: stream:输入流. size_t fwrite(const

Python 对Twitter中指定话题的被转载Tweet数量的频谱分析

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-10 @author: guaguastd @name: retweet_frequency_map.py ''' if __name__ == '__main__': # import visualize from visualize import visualize_frequency_map # pip install prettytable # fr

MDT2010 部署win7时提示应答文件中指定的组件或设置不存在

MDT2010使用win7映像在进行系统部署时提示 windows无法分析或处理pass[specialize]的无人参与应答文件[C:\windows\panther\unattend.xml].应答文件中指定的组件或设置不存在. 经多次检查MDT配置和检查映像均没有问题,后经资料和搜索发现以下原因. 原因:win7 系统 默认对应ie9,假设升级补丁后安装了ie10 ,那么在封装映像完成后,利用映像部署系统时就会发现这样的情况.因我为了省事一次性将补丁,ie及企业应用全部部署完成,再封装才出