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

2024-10-05 13:13:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

----------。注释部分----------------

第18652节注:

00000000类型:未知条目类型

0000000 C名称:Altium

00000014说明:ltc

00000018类型:未知条目类型

00000024名称:Altium

0000002c描述:TriCore的任务VX工具集:对象链接器v6.0r1构建277

0000006c:序号07689630

00000078类型:未知条目类型

00000084名称:Altium

0000008c描述:ltc-o C:\00\u SIVA\TRW\SANDBOX\DAIMLER\u MRAV3\u V1.1149\BUILD\TriCore

000000ce:\u MM\u应用程序\t核心\u MM_应用程序输出-dC:\00\u湿婆\trw\sandbox\Daimler\u MRAv3

0000010f:\u v1.1149\MainMicro\Application\Os\LinkerCmd\Source\链接器.lsl你知道吗

0000014d:--错误限制=99999-OCLtxY--输出=C:\00\u SIVA\TRW\SANDBOX\DAIML

0000018e:ER\u MRAV3\u V1.1149\BUILD\TriCore\u MM\u APP\TriCore\u MM_应用程序:SREC:4-你知道吗

000001cf:MC:\00\u西瓦\TRW\SANDBOX\DAIMLER\u MRAV3\u V1.1149\BUILD\TriCore\u MM\u AP

00000210:p\TriCore\u毫米_APP.mapxml文件:XML--optimize=-删除未引用的节

00000251:ons,-第一次拟合递减,+复制表压缩,+删除重复

00000292:电子代码,-删除重复数据--映射文件=C:\00\u SIVA\TRW\SANDBOX\D

000002d3:AIMLER\u MRAV3\u V1.1149\BUILD\TriCore\u MM\u APP\TriCore\u MM_应用程序地图你知道吗

00000310:--映射文件--用户提供的初始化代码C:\00\u SIVA\TRW\SAN

00000351:DBOX\DAIMLER\u MRAV3\u V1.1149\MainMicro\Application\SafeTLib\SBST\SB

00000392:ST\U Kernel\u CoreTest.o C:\00\u SIVA\TRW\SANDBOX\DAIMLER\u MRAV3\u V1.1149

000003d3:\MainMicro\Application\SafeTLib\SBST\SBST\u Kernel\u ISG.o C:\00\u SIVA

00000414:\TRW\SANDBOX\DAIMLER\u MRAV3\u V1.1149\MainMicro\Application\SafeTLib

00000455:\SBST\SBST\u Kernel\u TestCode.o C:\00\u SIVA\TRW\SANDBOX\DAIMLER\u MRAV3

00000496:\u V1.1149\MainMicro\Application\SafeTLib\SBST\SBST\u 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\u SIVA\TRW\SANDBOX\DAIMLER\u MRAV3\u V1.1149\MainMicro\Application\SafeTLib\SBST\SBST\u Kernel\u ISG.o

C:\00\u SIVA\TRW\SANDBOX\DAIMLER\u MRAV3\u V1.1149\MainMicro\Application\SafeTLib\SBST\SBST\u Kernel\u TestCode.o

C:\00\u SIVA\TRW\SANDBOX\DAIMLER\u MRAV3\u V1.1149\MainMicro\Application\SafeTLib\SBST\SBST\u RelocTable.o

C:\00\u SIVA\TRW\SANDBOX\DAIMLER\u MRAV3\u V1.1149\MainMicro\Application\SafeTLib\SBST\SBST\TC16E\u TestCode.o

C:\00\u SIVA\TRW\SANDBOX\DAIMLER\u MRAV3\u V1.1149\MainMicro\Application\SafeTLib\SBST\SBST\u TC16P\u CoreTest.o

C:\00\u SIVA\TRW\SANDBOX\DAIMLER\u MRAV3\u V1.1149\MainMicro\Application\SafeTLib\SBST\SBST\u TC16P\u ISG.o

但是输出缺少第一条路径,即C:\00\u SIVA\TRW\SANDBOX\DAIMLER\u MRAV3\u V1.1149\MainMicro\Application\SafeTLib\SBST\SBST\u Kernel\u CoreTest.o


Tags: indataapplicationtempwritesplitsandboxtrw

热门问题