Как указать несколько строк в файле XML, которые будут изменены в скрипте Python? - PullRequest
1 голос
/ 05 ноября 2019

Я помогаю переносить старые технические документы из моей старой компании в новую. Мне нужно удалить старые ссылки на компании, которые выглядят следующим образом: ABC Divisionname ProductName на ProductName.

И это также может быть имя подразделения ProductName на ProductName.

Существуют также старые имена технаря. документы для новых имен: techdoc для newdocname

Я нашел несколько сценариев, которые могут делать по 1 за раз. Затем я нашел скрипт glob, который делает несколько файлов одновременно, делая 1 изменение.

Я нашел несколько сценариев, которые могут выполнять 1 изменение XML-файла за раз. Затем я нашел скрипт glob, который делает несколько файлов одновременно, делая 1 изменение.

import glob
import ntpath
import os

output_dir = "output"

if not os.path.exists(output_dir):
os.makedirs(output_dir)

for f in glob.glob("*.xml"):
    with open(f, 'r', encoding='utf-8') as inputfile:
        with open('%s/%s' % (output_dir, ntpath.basename(f)), 'w',       encoding='utf-8') as outputfile:
        for line in inputfile:
            outputfile.write(line.replace('OldCompanyName ProductName', 'ProductName'))

Моя цель - заменить оба старых названия продуктов на новые. Является ли line.replace лучшим способом? Если да, могу ли я сделать "ABC Divisionname ProductName" |"Имя подразделения", "Имя продукта"?

1 Ответ

1 голос
/ 05 ноября 2019

Вы можете использовать метод замены регулярных выражений [re.sub]. Ниже приведен пример, который может помочь.

import re

sample_xml_data = 'ABC Divisionname ProductName is the company name'

sample_xml_data_1 = 'Divisionname ProductName is the company name'

# Here is your pattern
old_company_name_pattern = re.compile('ABC Divisionname ProductName|Divisionname ProductName')

new_company_name = 'ProductName'

print(re.sub(old_company_name_pattern,new_company_name,sample_xml_data))
print(re.sub(old_company_name_pattern,new_company_name,sample_xml_data_1))

output:

ProductName - название компании

ProductName - это компания

, для вашего примера вы можете использовать вот так

import re
import glob
import ntpath
import os

output_dir = "output"

if not os.path.exists(output_dir):
os.makedirs(output_dir)

old_company_name_pattern = re.compile('ABC Divisionname ProductName|Divisionname ProductName')
for f in glob.glob("*.xml"):
    with open(f, 'r', encoding='utf-8') as inputfile:
        with open('%s/%s' % (output_dir, ntpath.basename(f)), 'w',       encoding='utf-8') as outputfile:
        for line in inputfile:
            outputfile.write(re.sub(old_company_name_pattern,'ProductName',line))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...