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

时间:2013-01-04 22:37:12

标签: python

我正在尝试编写一个可以读取目录中几个.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

我花了一些时间从教程中将它拼凑在一起,虽然我已经设法找到教程来搜索特定的字符串并替换它,但我无法在字符串后删除所有内容并替换新的。

非常感谢任何建议:)

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

3 个答案:

答案 0 :(得分:1)

这对于大型文件来说并不是最快的实现,但应该可以正常工作。

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")

答案 1 :(得分:0)

如果你想删除特定字符串正则表达式之后的所有内容,就像对你一样!有点像这样:

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:

如果你想要它更清楚,但它应该做同样的事情。

答案 2 :(得分:0)

如果您正在编辑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