Python如何使用数组中的值进行逐行替换

2024-09-30 01:34:31 发布

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

我目前有一个Python脚本,它解析一个文件(在本例中是一个XML文件),并根据多个数组的值进行必要的逐行替换。从现在的情况来看,剧本很不错,但感觉可能会更好。稍后我还需要再添加几个数组,并且担心性能

另外,我目前的设置方式不允许计算和打印已完成的全部替换(e、 g.“Replaced:xyz--madexx replacements”)虽然不是即时需求,但我希望在将来添加此功能

如有任何建议,我将不胜感激

代码如下:

arrayOne = ["old string one", "new string one"]
arrayTwo = ["old string two", "new string two"]

# Variable 'path' collected from command line input
f = open(path, "r", encoding="utf8")
newFile = open(path.replace(".xml", "-new.xml"), "w", encoding="utf8")

def replace(a,b):
    for data in f:
        for datatype in (arrayOne, arrayTwo):
            data = data.replace(datatype[a], datatype[b])
        newFile.write(data)
    newFile.close()

replace(0,1)

f.close()

Tags: 文件pathnewdatastring数组openone
1条回答
网友
1楼 · 发布于 2024-09-30 01:34:31

我认为它看起来相当有效,虽然有点混乱。我想说,用一堆数组试试,看看性能是否有问题。如果您有大量的数组,并且必须像现在一样列出它们,那么它可能会变得混乱。我个人认为我应该把它们都放在一本大字典里,以“旧字符串”为关键。下面我就是这么做的

至于最后的打印行,我想通过一个计数器就足够了,如下所示

另外,现在我认为不需要replace作为一个单独的函数,除非您计划让它做一些更复杂的事情

myDictionary = {'old string one' : 'new string one',
                'old string two' : 'new string two'}

# Variable 'path' collected from command line input
f = open(path, "r", encoding="utf8")
newFile = open(path.replace(".xml", "-new.xml"), "w", encoding="utf8")
counter = 0

for data in f:
    for key in myDictionary:
        if key in data:
            data = data.replace(key, myDictionary[key])
            counter += 1
    newFile.write(data)
newFile.close()

f.close()

print 'Replaced', path, 'Made', counter, 'replacements.'

相关问题 更多 >

    热门问题