繁体   English   中英

在特定字符串之后从文本文件中删除多行,然后替换为新文本

[英]Remove multiple lines from a text file after a specific string, then replace with new text

我正在尝试编写一个脚本,该脚本可以读取目录中的多个.xml文件。找到特定的字符串(每个文件都有该脚本)后,我需要它删除该字符串之后的所有内容,并将其替换为新内容(如果方便的话,可以从另一个文件中提取)。

这里有许多行被删除/写入。

目前,我正在手动浏览文件并删除字符串后的所有文本,然后保存文件并运行此python脚本:

import fileinput
import sys
import os

os.chdir("F:\Desktop\PyTest")
rootdir='F:\Desktop\PyTest'

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        f=open(file, 'r')
        lines=f.readlines()
        f.close()
        f=open(file, 'a')
        f.write("\n      <Text>Lorem Ipsum</Text>")
        f.write("\n      <Text>Lorem Ipsum</Text>")
        f.write("\n      <Text>Lorem Ipsum</Text>")
        f.write("\n      <Text>Lorem Ipsum</Text>")
    f.close

我花了一些时间从教程中整理出这些内容,尽管我设法找到了用于搜索特定字符串并替换它的教程,但我仍然无法删除字符串后的所有内容并替换为new。

任何建议将不胜感激 :)

不必使用Python,但是我正在运行Windows环境。

值得注意的是,这不是大型文件的最快实现,但应该可以。

for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        output=[]
        with open(file, 'r') as inF:
            for line in inF:
                output.append(line)
                if 'criteria' in line: break
        f=open(file, 'a')
        Lorem_list=['Lorem Ipsum','Lorem Ipsum','Lorem Ipsum']
        #The '\n' may look strange, but I am using your previous syntax.
        #This also will result in a blank line. I would suggest revising the
        #way you place text to follow the (x+'\n') format.
        [f.write(x) for x in output]
        [f.write('\n      '+x) for x in Lorem_list]
        f.close()

将“条件”替换为您要查找的字符串。

要清楚:

Lorem_list=['Lorem Ipsum','Lorem Ipsum','Lorem Ipsum']
[f.write('\n      '+x) for x in Lorem_list]

手段:

    f.write("\n      Lorem Ipsum")
    f.write("\n      Lorem Ipsum")
    f.write("\n      Lorem Ipsum")

如果您想在特定字符串正则表达式听起来像我之后删除所有内容,那么适合您! 与此类似:

import re

def trim(test_string, removal_string):
    return re.sub(r'^(.*?)('+ removal_string + ')(.*)$', r'\1' + r'\2', test_string)

example = "I want to remove everything after quips, this for instance is useless"
print trim(example, 'quips')

returns "I want to remove everything after quips

希望能有所帮助

如果要在文件上执行此操作,则可以这样调用上面的代码:

def cleanFile(file_path):
    with open(file_path) as master_text:
        return trim(master_text)

就那么简单。 如果您可以更详细地将空白行写成

with open(file_path, 'r').read() as master_text:

如果您想更清楚一点,但是应该做同样的事情。

如果您要编辑XML,则需要签出Beautiful Soup之类的XML编辑器。

根据您的要求,假设这是我们的字符串:

str = """Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum libero sem, 
sollicitudin nec bibendum nec, condimentum sed magna. Duis malesuada, mi vel aliquet auctor, 
mi dui molestie massa, ac dapibus velit justo ut lorem. Donec fermentum euismod elementum. 
Etiam et ligula nisi, in porta lacus. 0 Nam laoreet, ligula pretium facilisis eleifend, 
purus dolor commodo nisi, eget iaculis dolor arcu eu neque. Integer sit amet blandit est. In 
eu ipsum nec turpis sagittis tincidunt"""

并且您想替换0个新内容之后的所有内容。

new_stuff = '''
               No breeze, O majestic nose, can give thee cold - save when the north 
               winds blow.
            '''

better_string = str[0:str.index('0')] + new_stuff

暂无
暂无

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

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