Python Требуется программа xml2csv xmlutils - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть набор кода на недавно установленной машине, который мне нужно активировать. По сути, это скрипт, который преобразует файл .dat в стиле xml в файл .csv, создавая временный файл в качестве посредника и преобразуя текст с помощью функции convert (). По-видимому, для этого используется исходный код с сайта pypi.org.

from xmlutils.xml2csv import xml2csv
import sys

xml_source = sys.argv[1]
obj_name = sys.argv[2]
filename_temp = xml_source + '.temp'
filename_csv = xml_source.replace('.dat','') + '.csv'

fin = open(xml_source)
fout = open(filename_temp, "wt")
fout.write("<root>")
for line in fin:
    fout.write( line.replace("<?xml version='1.0' encoding='UTF-8'?>", '') )
fout.write("</root>")
fin.close()
fout.close()

converter = xml2csv(filename_temp, filename_csv)
converter.convert(tag=obj_name)

Ниже приведен пример ввода в формате xml, который переводится построчно, группируется в одну запись в файле .csv. файл по тегу. Вывод будет одной строкой файла .csv.

    <?xml version='1.0' encoding='UTF-8'?>
<Account>
  <Name>Alta Paints &amp; Coatings  Inc</Name>
  <Type>Non Customer</Type>
  <RecordTypeId>012E0000000PR3uIAG</RecordTypeId>
  <ShippingStreet>136 W 3300 S</ShippingStreet>
  <ShippingCity>Salt Lake City</ShippingCity>
  <ShippingState>UT</ShippingState>
  <ShippingPostalCode>84115-3704</ShippingPostalCode>
  <Phone>801-466-9625</Phone>
  <Sic>5198</Sic>
  <NumberOfEmployees>16</NumberOfEmployees>
  <Description>PAINTS, VARNISHES, AND SUPPLIES</Description>
  <Sales_Channel__c>NAAO</Sales_Channel__c>
  <Xerox_Address_1__c>136 W 3300 S</Xerox_Address_1__c>
  <Xerox_City__c>Salt Lake City</Xerox_City__c>
  <Duns__c>197857873</Duns__c>
  <Legal_Name__c>ALTA PAINTS &amp; COATINGS, INC.</Legal_Name__c>
  <Secondary_Name__c />
  <Latitude__c>40.699928</Latitude__c>
  <Longitude__c>-111.895096</Longitude__c>
  <Map_Status__c>G_GEO_SUCCESS</Map_Status__c>
  <Xerox_County__c>SALT LAKE</Xerox_County__c>
  <Xerox_State__c>UT</Xerox_State__c>
  <Xerox_Zip_4__c>3704</Xerox_Zip_4__c>
  <County__c>SALT LAKE</County__c>
  <Department__c>1</Department__c>
  <Franchise__c />
  <County_Code__c>035</County_Code__c>
  <Domestic_Ultimate_DUNS_Number__c>197857873</Domestic_Ultimate_DUNS_Number__c>
  <Global_Ultimate_DUNS_Number__c>197857873</Global_Ultimate_DUNS_Number__c>
  <Headquarters_DUNS_Number__c>197857873</Headquarters_DUNS_Number__c>
  <Location_Employee_Qty__c>16</Location_Employee_Qty__c>
  <Xerox_Zip_Code__c>84115-3704</Xerox_Zip_Code__c>
  <Org_Group_Code__c>1</Org_Group_Code__c>
  <Parent_DUNS__c />
  <Potential_Copy_Dupl_Qty__c>4974.4</Potential_Copy_Dupl_Qty__c>
  <Potential_Printing_Sys_Qty__c>10152.0</Potential_Printing_Sys_Qty__c>
  <Telephone_Last_4__c />
  <Subsidiary_Indicator__c>0</Subsidiary_Indicator__c>
  <Trade_Name__c />
  <XNAC_Code__c />
  <XNAC_Division__c />
  <Zip_4__c>3704</Zip_4__c>
  <Customer_Indicator__c>0.0</Customer_Indicator__c>
  <Franchise_Parent__c />
  <Telephone_Area_Code__c>801</Telephone_Area_Code__c>
  <Telephone_Exchange__c>466</Telephone_Exchange__c>
  <Total_Lsr_Prtg_Vol__c>0.0</Total_Lsr_Prtg_Vol__c>
  <Open_Sales_Channel__c>USCO</Open_Sales_Channel__c>
  <Estab_Copy_Volume__c>0.0</Estab_Copy_Volume__c>
</Account><?xml version='1.0' encoding='UTF-8'?>
<Account>
  <Name>Alta Paints &amp; Coatings  Inc</Name>
  <Type>Non Customer</Type>
  <RecordTypeId>012E0000000PR3uIAG</RecordTypeId>
  <ShippingStreet>136 W 3300 S</ShippingStreet>
  <ShippingCity>Salt Lake City</ShippingCity>
  <ShippingState>UT</ShippingState>
  <ShippingPostalCode>84115-3704</ShippingPostalCode>
  <Phone>801-466-9625</Phone>
  <Sic>5198</Sic>
  <NumberOfEmployees>16</NumberOfEmployees>
  <Description>PAINTS, VARNISHES, AND SUPPLIES</Description>
  <Sales_Channel__c>NAAO</Sales_Channel__c>
  <Xerox_Address_1__c>136 W 3300 S</Xerox_Address_1__c>
  <Xerox_City__c>Salt Lake City</Xerox_City__c>
  <Duns__c>197857873</Duns__c>
  <Legal_Name__c>ALTA PAINTS &amp; COATINGS, INC.</Legal_Name__c>
  <Secondary_Name__c />
  <Latitude__c>40.699928</Latitude__c>
  <Longitude__c>-111.895096</Longitude__c>
  <Map_Status__c>G_GEO_SUCCESS</Map_Status__c>
  <Xerox_County__c>SALT LAKE</Xerox_County__c>
  <Xerox_State__c>UT</Xerox_State__c>
  <Xerox_Zip_4__c>3704</Xerox_Zip_4__c>
  <County__c>SALT LAKE</County__c>
  <Department__c>1</Department__c>
  <Franchise__c />
  <County_Code__c>035</County_Code__c>
  <Domestic_Ultimate_DUNS_Number__c>197857873</Domestic_Ultimate_DUNS_Number__c>
  <Global_Ultimate_DUNS_Number__c>197857873</Global_Ultimate_DUNS_Number__c>
  <Headquarters_DUNS_Number__c>197857873</Headquarters_DUNS_Number__c>
  <Location_Employee_Qty__c>16</Location_Employee_Qty__c>
  <Xerox_Zip_Code__c>84115-3704</Xerox_Zip_Code__c>
  <Org_Group_Code__c>1</Org_Group_Code__c>
  <Parent_DUNS__c />
  <Potential_Copy_Dupl_Qty__c>4974.4</Potential_Copy_Dupl_Qty__c>
  <Potential_Printing_Sys_Qty__c>10152.0</Potential_Printing_Sys_Qty__c>
  <Telephone_Last_4__c />
  <Subsidiary_Indicator__c>0</Subsidiary_Indicator__c>
  <Trade_Name__c />
  <XNAC_Code__c />
  <XNAC_Division__c />
  <Zip_4__c>3704</Zip_4__c>
  <Customer_Indicator__c>0.0</Customer_Indicator__c>
  <Franchise_Parent__c />
  <Telephone_Area_Code__c>801</Telephone_Area_Code__c>
  <Telephone_Exchange__c>466</Telephone_Exchange__c>
  <Total_Lsr_Prtg_Vol__c>0.0</Total_Lsr_Prtg_Vol__c>
  <Open_Sales_Channel__c>GIS</Open_Sales_Channel__c>
  <Estab_Copy_Volume__c>0.0</Estab_Copy_Volume__c>
</Account><?xml version='1.0' encoding='UTF-8'?>
<Account>
  <Name>Sun &amp; Moon Cafe</Name>
  <Type>Non Customer</Type>
  <RecordTypeId>012E0000000PR3uIAG</RecordTypeId>
  <ShippingStreet>22929 Highway 99</ShippingStreet>
  <ShippingCity>Edmonds</ShippingCity>
  <ShippingState>WA</ShippingState>
  <ShippingPostalCode>98026-8468</ShippingPostalCode>
  <Phone>425-977-2929</Phone>
  <Sic>5812</Sic>
  <NumberOfEmployees>9</NumberOfEmployees>
  <Description>EATING PLACES</Description>
  <Sales_Channel__c>NAAO</Sales_Channel__c>
  <Xerox_Address_1__c>22929 Highway 99</Xerox_Address_1__c>
  <Xerox_City__c>Edmonds</Xerox_City__c>
  <Duns__c>031593575</Duns__c>
  <Legal_Name__c>SUN &amp; MOON CAFE</Legal_Name__c>
  <Secondary_Name__c />
  <Latitude__c>47.791194</Latitude__c>
  <Longitude__c>-122.337749</Longitude__c>
  <Map_Status__c>G_GEO_SUCCESS</Map_Status__c>
  <Xerox_County__c>SNOHOMISH</Xerox_County__c>
  <Xerox_State__c>WA</Xerox_State__c>
  <Xerox_Zip_4__c>8468</Xerox_Zip_4__c>
  <County__c>SNOHOMISH</County__c>
  <Department__c />
  <Franchise__c />
  <County_Code__c>061</County_Code__c>
  <Domestic_Ultimate_DUNS_Number__c />
  <Global_Ultimate_DUNS_Number__c />
  <Headquarters_DUNS_Number__c />
  <Location_Employee_Qty__c>9</Location_Employee_Qty__c>
  <Xerox_Zip_Code__c>98026-8468</Xerox_Zip_Code__c>
  <Org_Group_Code__c>0</Org_Group_Code__c>
  <Parent_DUNS__c />
  <Potential_Copy_Dupl_Qty__c>994.5</Potential_Copy_Dupl_Qty__c>
  <Potential_Printing_Sys_Qty__c>1976.67</Potential_Printing_Sys_Qty__c>
  <Telephone_Last_4__c />
  <Subsidiary_Indicator__c>0</Subsidiary_Indicator__c>
  <Trade_Name__c />
  <XNAC_Code__c />
  <XNAC_Division__c />
  <Zip_4__c>8468</Zip_4__c>
  <Customer_Indicator__c>0.0</Customer_Indicator__c>
  <Franchise_Parent__c />
  <Telephone_Area_Code__c>425</Telephone_Area_Code__c>
  <Telephone_Exchange__c>977</Telephone_Exchange__c>
  <Total_Lsr_Prtg_Vol__c>0.0</Total_Lsr_Prtg_Vol__c>
  <Open_Sales_Channel__c>USCO</Open_Sales_Channel__c>
  <Estab_Copy_Volume__c>0.0</Estab_Copy_Volume__c>
</Account><?xml version='1.0' encoding='UTF-8'?>

На моем предыдущем компьютере я смог ввести путь к имени сценария преобразования python, к файлу .dat в стиле xml. имя, дескриптор учетной записи и процесс соответственно.

Пример:

C:\data\convert_xml_to_csv.py C:\data\csv\2020-02-13-estab-insert.dat Account

Сначала я получил сообщение об ошибке, что программа не была доступна, поэтому я в конце концов нашел страницу для загрузки последняя версия Python (v 3.8.1). Я выбрал исполняемую версию для загрузки x86-64. После этого команда просто переходит на следующую строку без каких-либо действий или чего-либо обработанного. Я не уверен, нужно ли мне загружать что-либо еще со страницы исходного кода xmlutils или что делать дальше. Возможно, мне придется пройтись по остальной части процесса, чтобы активировать этот скрипт на новом компьютере. Это было передано однажды, но создатель больше не с компанией. Кто-нибудь может мне помочь?

Joao,

Поэтому я скачал последнюю версию Python (версия 3.8.1), определил путь к установочному файлу .exe и добавил его Путь в переменных среды. Пути приведены на скриншотах 2 и 3 ниже:

Затем я попытался запустить свой скрипт из Powershell, однако он просто пропустил следующую строку без создания выходного файла. Затем я попытался запустить тот же сценарий в командной строке, и это привело к тому, что модуль xmlutils не был найден.

Похоже, мне, возможно, придется загрузить пакет xmlutils с сайта PyPl. Но, похоже, сейчас у меня нет четкого способа сделать это, запустив файл .tar.gz.

Обновление: 2/18/20

Полагаю, я успешно установили последнюю версию пакета xmlutils python с помощью команды pip. Сделав это, я снова попытался преобразовать файл, который не распознает часть кода. Мое единственное предположение с этой ошибкой на данный момент состоит в том, что это ошибка, связанная с обновленной версией этой программы. Кто-нибудь может сделать необходимые настройки здесь на основе этой информации?

Обновление: 3/5/2020

Таким образом, после установки xmlutils и пакета setuptools, где оба находятся в пути к переменным среды, запуск сценария теперь фактически создает клонированный временный файл. подать этот сценарий обычным делом Однако он оставляет файл назначения готового вывода пустым для файла .csv. У кого-нибудь есть какие-либо другие предложения относительно исправления этого?

xml2csv python Результат сценария - 5 марта

Ошибка преобразования с установленным xmlutils

Вывод командной строки

Python Результат проверки среды

Python Изображение пути

Путь к переменной среды

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

Per python .org:

Если первая строка файла сценария начинается с # !, она называется строкой «шебанга». Linux и другие Unix подобные операционные системы имеют встроенную поддержку таких строк, и они обычно используются в таких системах для указания того, как должен выполняться скрипт. Этот модуль запуска позволяет использовать те же средства со скриптами Python на Windows, и примеры выше демонстрируют их использование.

Источник: Python .org: линии Шебанга

Я предлагаю добавить строки Шебанга (да, даже в Windows) к началу вашего Python сценария. Он должен работать без указания имени скрипта с помощью python.

Надеюсь, это поможет.

0 голосов
/ 14 февраля 2020

При вызове сценариев python из терминала необходимо передать сценарии в качестве аргументов для вызова python.

Прежде всего, когда вы установили Python, добавили ли вы его в Переменная окружения PATH? Запустите следующую команду и сообщите результат:

python -V

Если команда работает нормально и печатает вашу версию Python в командной строке, теперь вы можете вызвать сценарий, выполнив:

python C:\data\convert_xml_to_csv.py C:\data\csv\2020-02-13-estab-insert.dat Account

Дайте мне знать, если у вас все еще есть проблемы

Редактировать В ответ на ваш вывод Powershell Get-command у вас либо нет Python (в этом случае go через шаг 1), или у вас его просто нет в переменной среды PATH (пропустите шаги 1 и go непосредственно к шагу 2).

Шаг 1: установите Python

  • Go на Python веб-сайт и загрузите Python версию по вашему выбору (для этого сценария я думаю, что вы хороши с любой версией Python 3). Например, для Python 3.7 загрузите этот файл ;
  • Откройте только что загруженный исполняемый файл и выберите «Установить сейчас» или «Настроить установку», если вы предпочитаете выбрать место установки, но запишите это место, если вы go с последним параметром;
  • Вы можете выбрать здесь, чтобы добавить Python к переменной среды PATH, но я намеренно проигнорировал его охватить другой сценарий .

Шаг 2. Добавление Python в переменную среды PATH

  • Перед началом этого шага, вам понадобится путь к вашему Python исполняемому файлу. Если вы выполнили шаг 1 и выбрали место установки по умолчанию, это будет что-то вроде C:\Users\<your user here>\AppData\Local\Programs\Python\Python37\
  • Перейдите к переменным среды windows (Свойства системы-> вкладка «Дополнительно» -> «Переменные среды» или просто нажмите клавишу windows и найдите переменные окружения);
  • В поле Системные переменные найдите запись Path, выберите ее и выберите для редактирования переменную;
  • Теперь это хорошо Пора перепроверить, что там нет Python связанных каталогов (вероятно, нет, учитывая скриншот, который вы показали). Выберите New, и появится новая строка, вставьте путь, на который вы обратили внимание;
  • Примите изменения;
  • Теперь откройте новый powershell и попробуйте команду еще раз;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...