1

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

4

3 回答 3

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")
于 2013-01-04T22:50:51.507 回答
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:

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

于 2013-01-04T22:48:11.703 回答
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
于 2013-01-04T22:54:50.453 回答