我需要用第二个文件中的值替换XML文件。 问题是,由于某种原因,我的xml文件被完全清除,所有数据都被删除。 应该保留数据,除非它在XML文件上找到${key},然后它应该只用${value}替换它
import os
import progressbar
#VARIABLE TO CONCATENATE WITH THE FILE NAME
home = '/u01/app/oracle/mftxfer_adoc/DAYS/ola/'
#I WILL USE THIS FOLDER TO CHECK FOR FILES WITH THE NAME AJOG
directory = os.listdir('/u01/app/oracle/mftxfer_adoc/DAYS/ola/')
#THIS FILE IS MY FILTER LIST
word_list = open('/u01/app/oracle/mftxfer_adoc/DAYS/teste.txt').readlines()
#FOR EACH FILE THAT ENCOUNTERS ON THE DIRECTORY
for file_xml in directory:
#IF THE FILENAME HAS AJOG IN IT
if file_xml.__contains__('AJOG'):
print("Processing the file"+" "+file_xml)
#OPENS THE FILE
file_read = open(home+file_xml, 'r').readlines()
#NOW WILL CHECK IF THE LINE CONTAINS A SPECIFIC STRING
for line in file_read:
if "<codigo>" in line:
#IF HAS THEN PICKS THE FILTER
for word_list_line in word_list:
#DEVIDES THE FILTER IN 2 COLUMNS
key = str((word_list_line.split(' ')[0]))
value = str((word_list_line.split(' ')[1]))
#CHECKS IF THE VALUE FROM THE FIRST COLUMN IN ON THE LINE OF THE AJOG FILE
if key in line:
print("Found the value "+key+" on file "+file_xml)
#IF SO THEN REPLACE THE VALUE FROM THE FIRST COLUMN WITH THE SECOND COLUMN
file_read=line.replace(key, value)
#THE SAME FILE IS OPENED IN WRITE MODE
file_write = open(home + file_xml, 'w')
#WRITES THE CHANGES TO THE LINE
file_write.writelines(file_read)
文件被删除的原因是您在写入模式下重新打开它。执行此操作时,文件将被截断(清除)。请参阅open()描述。可以附加到文件,但不是您想要的
我认为XML解析器(如@andercurzbr answer中所建议的)是最好的解决方案。但是如果您想使用您的代码,您可以使用fileinput模块,它允许快速循环文件的行。这是一个使用fileinput编辑脚本的示例。它没有测试,但应该给你的想法
注意,当使用
inplace=True
选项时,输出被重定向到文件本身。从文档中:这意味着
print()
函数在调用fileinput.input(home+file_xml, inplace=True)
写入文件之后调用。未编辑的行也必须打印出来,否则就会丢失,这就是为什么我添加了两个else
在不了解整个程序的很多上下文的情况下,我注意到您没有关闭该文件。有时看起来好像什么都没写,这是因为它都被卡在缓冲区中,没有被写,所以使用
file_write.close()
或者更好的方法,使用with open(filename, "w")
来避免将来发生这种情况将XML文件作为文本进行操作是一项艰巨的任务
你可以用图书馆吗
此示例可以指导您找到更好的方法
相关问题 更多 >
编程相关推荐