繁体   English   中英

使用python从文本文件中提取路径

[英]Extracting paths from text file using python

我有一个巨大的文本文件,其中包含不同的路径。 我必须提取包含.o文件的路径。 我正在这样做,但是第一条路径没有被提取。 我需要制作一个通用代码来提取这种类型的文件,文件如下所示

---------- .note部分----------

.note节,第18652节:

00000000类型:未知的输入类型

0000000c名称:Altium

00000014说明:ltc

00000018类型:未知条目类型

00000024名称:Altium

0000002c desc:TriCore的TASKING VX工具集:对象链接程序v6.0r1内部版本277

0000006c:SN 07689630

00000078类型:未知条目类型

00000084名称:Altium

0000008c说明:ltc -o C:\\ 00_SIVA \\ TRW \\ SANDBOX \\ DAIMLER_MRAV3_V1.1149 \\ BUILD \\ TriCore

000000ce:_MM_APP \\ TriCore_MM_APP.out -dC:\\ 00_Siva \\ trw \\ sandbox \\ Daimler_MRAv3

0000010f:_v1.1149 \\ MainMicro \\ Application \\ Os \\ LinkerCmd \\ Source \\ Linker.lsl

0000014d:--error-limit = 99999 -OCLtxY --output = C:\\ 00_SIVA \\ TRW \\ SANDBOX \\ DAIML

0000018e:ER_MRAV3_V1.1149 \\ BUILD \\ TriCore_MM_APP \\ TriCore_MM_APP.sre:SREC:4-

000001cf:MC:\\ 00_SIVA \\ TRW \\ SANDBOX \\ DAIMLER_MRAV3_V1.1149 \\ BUILD \\ TriCore_MM_AP

00000210:P \\ TriCore_MM_APP.mapxml:XML --optimize =-删除未引用的secti

00000251:开启,首次拟合递减,+可复制压缩,+删除重复

00000292:电子代码,删除重复数据--map-file = C:\\ 00_SIVA \\ TRW \\ SANDBOX \\ D

000002d3:AIMLER_MRAV3_V1.1149 \\ BUILD \\ TriCore_MM_APP \\ TriCore_MM_APP.map

00000310:--map文件-用户提供的初始化代码C:\\ 00_SIVA \\ TRW \\ SAN

00000351:DBOX \\ DAIMLER_MRAV3_V1.1149 \\ MainMicro \\ Application \\ SafeTLib \\ SBST \\ SB

00000392:ST_Kernel_CoreTest.o C:\\ 00_SIVA \\ TRW \\ SANDBOX \\ DAIMLER_MRAV3_V1.1149

000003d3:\\ MainMicro \\ Application \\ SafeTLib \\ SBST \\ SBST_Kernel_ISG.o C:\\ 00_SIVA

00000414:\\ TRW \\ SANDBOX \\ DAIMLER_MRAV3_V1.1149 \\ MainMicro \\ Application \\ SafeTLib

00000455:\\ SBST \\ SBST_Kernel_TestCode.o C:\\ 00_SIVA \\ TRW \\ SANDBOX \\ DAIMLER_MRAV3

00000496:_V1.1149 \\ MainMicro \\ Application \\ SafeTLib \\ SBST \\ SBST_RelocTable.o

import re

ftemp = open(r'D:/temp.txt','w+')
ftest = open(r'D:/test123.txt','w+')
infile = open(r'D:/HLDUMPTC_of_ELF_file.txt','r')
data = infile.readlines()
#print(type(data))
#print(len(data))

actual_data = []
for i in data:
    a = i.rstrip('\n')
    colon_split = a.split(':',1)   
    if(len(colon_split) > 1):
        fdata=colon_split[1].lstrip()
        actual_data.append(fdata)
        #actual_data.append(colon_split[1])


ftemp.writelines(actual_data)
ftemp.close()
infile.close()

ftemp = open(r'D:/temp.txt','r')
temp_data = ftemp.readlines()
#print(type(temp_data))

temp_data1 = [x.lstrip(' ') for x in temp_data]
temp_data2 = [x.rstrip(' ') for x in temp_data1]

line = ''.join(temp_data2)
#print(type(line))
#print(len(line))

nameslist = line.split('.o')
#print(type(nameslist))
#ftest.writelines(nameslist)
#sbreak

ogslist=[]
ogscount = 0

for x in nameslist:
    new = x + '.o'
    newstr1 = new.lstrip(' ')
    newstr = newstr1.replace('. o','.o')
    ogstest = '-Ogs -o' in newstr
    srctest = '.src' in newstr
    if(ogstest == True):
        ogslist.append(newstr)
        ogscount += 1
        continue
    if(srctest == True):
        continue

    if(re.search('^[A-Z][:]',newstr)):

        ftest.write(newstr)
        ftest.write("\n")


#print(ogslist)

for a in ogslist:
    res_spl = a.split('-Ogs -o')
    file1 = res_spl[1].lstrip(' ')
    file = file1.rstrip(' ')
    oend = re.search('.o$',file)
    if(oend == True):
        ftest.write(file)
        ftest.write("\n")

ftest.close()
ftemp.close()

### Final Formatting

fcheck = open(r'D:/test123.txt','r')
ffinal = open(r'D:/out.txt','w+')

check_data = fcheck.readlines()

for s in check_data:
    ccnt = s.count('.o')
    if(ccnt > 1):
        final_split = s.split('.o')
        if(len(final_split) > 0):
            for k in final_split:
                final = k + '.o'
                ffinal.write(final)
                ffinal.write("\n")
    else:
        ffinal.write(s)
        ffinal.write("\n")

ffinal.close()
fcheck.close()

输出:C:\\ 00_SIVA \\ TRW \\ SANDBOX \\ DAIMLER_MRAV3_V1.1149 \\ MainMicro \\ Application \\ SafeTLib \\ SBST \\ SBST_Kernel_ISG.o

C:\\ 00_SIVA \\ TRW \\ SANDBOX \\ DAIMLER_MRAV3_V1.1149 \\ MainMicro \\ Application \\ SafeTLib \\ SBST \\ SBST_Kernel_TestCode.o

C:\\ 00_SIVA \\ TRW \\ SANDBOX \\ DAIMLER_MRAV3_V1.1149 \\ MainMicro \\ Application \\ SafeTLib \\ SBST \\ SBST_RelocTable.o

C:\\ 00_SIVA \\ TRW \\ SANDBOX \\ DAIMLER_MRAV3_V1.1149 \\ MainMicro \\ Application \\ SafeTLib \\ SBST \\ SBST_TC16E_TestCode.o

C:\\ 00_SIVA \\ TRW \\ SANDBOX \\ DAIMLER_MRAV3_V1.1149 \\ MainMicro \\ Application \\ SafeTLib \\ SBST \\ SBST_TC16P_CoreTest.o

C:\\ 00_SIVA \\ TRW \\ SANDBOX \\ DAIMLER_MRAV3_V1.1149 \\ MainMicro \\ Application \\ SafeTLib \\ SBST \\ SBST_TC16P_ISG.o

但是输出缺少第一条路径,即C:\\ 00_SIVA \\ TRW \\ SANDBOX \\ DAIMLER_MRAV3_V1.1149 \\ MainMicro \\ Application \\ SafeTLib \\ SBST \\ SBST_Kernel_CoreTest.o

假设路径可以在任何地方,但用空格隔开,换句话说:

with open("test.txt") as f:
    for line in f:
        for word in line.split(" "):
            if re.search("^.*\.o$", word):
                print (word.strip())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM