Создан скрипт с использованием Python3, который принимает входные данные в виде CSV и XML-файла и выводит XML-файл с изменениями.Команда:
python xml_converter.py –csvfile file.csv –xmlfile file.xml –outfile output_file.xml
Не полностью оптимизирована, как хотелось бы, чтобы она работала в одном потоке, и предполагается, что файлы имеют кодировку utf-8.
usage: Replace username to user email of a given xml file
[-h] --csvfile CSVFILE --xmlfile XMLFILE --outfile OUTFILE
optional arguments:
-h, --help show this help message and exit
--csvfile CSVFILE csv file that provide user name and email pair
--xmlfile XMLFILE xml file that to be searched and replaced
--outfile OUTFILE output file name
Базовый сценарий:
class XMLConvert:
def __init__(self, csv, xml, out):
self._csv = csv
self._xml = xml
self._out = out
self._kv_dict = self.prepare_kv_dict()
def prepare_kv_dict(self):
with open(self._csv, newline='', encoding='utf-8') as f:
reader = csv.reader(f)
result = dict()
for row in reader:
result[row[1]] = row[2]
return result
def convert(self):
with open(self._xml, 'r', encoding='utf-8') as f:
for line in f:
_line = self.convert_line(line)
yield _line
def convert_line(self, line):
# self._kv_dict = {'lasfir1': 'First.Name@abc.com'}
for k, v in self._kv_dict.items():
if k.lower() in line:
# print(line)
return re.sub(r'{}'.format(k), v, line)
return line
def start(self):
with open(self._out, 'w', encoding='utf-8') as f:
for line in self.convert():
f.write(line)
if __name__ == '__main__':
csv_file, xml_file, out_file = parse_args()
converter = XMLConvert(csv_file, xml_file, out_file)
converter.start()
Я пытаюсь добавить потоки и изменить его соответствующим образом, чтобы оптимизировать его работу.Если у кого-то есть лучший способ, пожалуйста, сообщите.