簡體   English   中英

在最后一次出現字符串之后刪除文件中的所有內容

[英]Delete everything in file after last appearance string

我想制作一個查看文件的程序,找到每個不完整的文件(最后沒有</module> ),然后它將打印文件中最后找到的 abnumber 並刪除它之后的每一行(包括最后一個帶有 abnumber 的行)。

所以我的文件看起來像這樣:

<Module bs="Mainfile_1">
<object id="1000" name="namex" abnumber="1">
    <item name="item0" value="100" />
    <item name="item00" value="100" />
</object>
<object id="1001" name="namey" abnumber="2">
    <item name="item1" value="100" />
    <item name="item00" value="100" />
</object>
<object id="1234" name="name1" abnumber="3">
    <item name="item1" value="something11:

something11" />
    <item name="item2" value="233" />
    <item name="item3" value="233" />
    <item name="item4" value="something12:

12something" />
</object>
<object id="1238" name="name2" abnumber="4">
    <item name="item8" value="something12:
    <item name="item9" value="233" />

最后它應該看起來像:

<Module bs="Mainfile_1">
<object id="1000" name="namex" abnumber="1">
    <item name="item0" value="100" />
    <item name="item00" value="100" />
</object>
<object id="1001" name="namey" abnumber="2">
    <item name="item1" value="100" />
    <item name="item00" value="100" />
</object>
<object id="1234" name="name1" abnumber="3">
    <item name="item1" value="something11:

something11" />
    <item name="item2" value="233" />
    <item name="item3" value="233" />
    <item name="item4" value="something12:

12something" />
</object>

印刷:4

我開始做類似的事情,但我覺得我做錯了一切:

import os

Mainfile = 'path'
for filename in os.listdir(Mainfile):
    lines = filename.readlines()
    if not "</Module>" in lines:
        with open(filename, 'r+', encoding="utf-8") as file:
            line_list = list(file)
            line_list.reverse()
            for line in line_list:
                if line.find('absno') != -1:
                    print(line)

你可以使用re來得到你的結果:

<object([\s\S]*?)<\/object>獲取正確的<object... </object>標簽

abnumber=\"([0-9.]+)獲取不正確標簽的 abnnumber

<Module.*|<object(?:[\s\S]*?)<\/object>獲取正確格式的 xml 數據

import re

data = """<Module bs="Mainfile_1">
<object id="1000" name="namex" abnumber="1">
    <item name="item0" value="100" />
    <item name="item00" value="100" />
</object>
<object id="1001" name="namey" abnumber="2">
    <item name="item1" value="100" />
    <item name="item00" value="100" />
</object>
<object id="1234" name="name1" abnumber="3">
    <item name="item1" value="something11:

something11" />
    <item name="item2" value="233" />
    <item name="item3" value="233" />
    <item name="item4" value="something12:

12something" />
</object>
<object id="1238" name="name2" abnumber="4">
    <item name="item8" value="something12:
    <item name="item9" value="233" />"""


invalid_XML_Tag = re.sub("<object([\s\S]*?)<\/object>", '', data)
abnnumber_value = re.findall("abnumber=\"([0-9.]+)", invalid_XML_Tag)
print("abnumber of invalid tag => {0}".format(abnnumber_value))

correct_xml_format = re.findall("<Module.*|<object(?:[\s\S]*?)<\/object>",data)
print("".join(correct_xml_format))

輸出:

 abnumber of invalid tag => ['4']
<Module bs="Mainfile_1"><object id="1000" name="namex" abnumber="1">
    <item name="item0" value="100" />
    <item name="item00" value="100" />
</object><object id="1001" name="namey" abnumber="2">
    <item name="item1" value="100" />
    <item name="item00" value="100" />
</object><object id="1234" name="name1" abnumber="3">
    <item name="item1" value="something11:

something11" />
    <item name="item2" value="233" />
    <item name="item3" value="233" />
    <item name="item4" value="something12:

12something" />
</object>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM