Оценок пока нет Python — скрипт для автодобавления подкатегорий для CMS OpenCart из списка XML

Данное решение возникло из-за потребности автодобавления подкатегорий в таблицу OpenCart из уже существующего списка. Так, как списка было порядка тысячи строк, то это бы заняло целый день, чтобы добавить через административную часть. Пришлось разработать специальный скрипт на Python для автоматизации процесса добавления. Скрпит состоит из главного выполняемого файла MySQL_insert.py, 2-х html файлов(file-ru.html и file-en.ru) с содержимыми списка категорий, которые скопированы с другого сайта, которые нам нужно перенести на наш сайт. Один из этих файлов на английском, а другой-  на русском, потому как сайт у нас мультиязычный и нам потребуется перевести на английский список, просто копипастив в Яндекс.Переводчик. Почему Яндекс? Потому что он не добавляет от себя форматирование тегов HTML. Также есть вспомогательный скрипт TestForFile.py, который сверяет файлы со списками подкатегорий на то, что список не бит и что каждое слово на русском в списке соответствует каждому слову на английском. Ниже все файлы и ссылка на GitHub

#Server Connection to MySQL:
import MySQLdb
import re
import time
import config
#Var of Opencart DB connect
dbHost = config.dbHost
dbUser = config.dbUser
dbPassword = config.dbPassword
dbName = config.dbName
dbCharset = config.dbCharset
dbInit =  config.dbInit
#Var of Tables Opencart in process
#Tag name
tag = "span"
#Var of IDs
rootId = 185 #Root ID ofr all categories
parentId = 270 #Current parent ID of adding subcategory
currentId = None #Current subcategory ID

conn = MySQLdb.connect(host= dbHost,
                  user=dbUser,
                  passwd=dbPassword,
                  db=dbName,
                  charset=dbCharset, 
                  init_command=dbInit)
x = conn.cursor()
conn.autocommit(True)

#Regex Rule
pattern = r"(?<=\<"+tag+"\>)(\s*.*\s*)(?=\<\/"+tag+"\>)"
#Regex for ru text from file
file = open("files/file-ru.html", mode="r", encoding="utf-8")
fileString = file.read()
resultTextRu = re.findall(pattern, fileString)
#Regex for en text from file
file = open("files/file-en.html", mode="r", encoding="utf-8")
fileString = file.read()
resultTextEn = re.findall(pattern, fileString)

if len(resultTextRu)==len(resultTextEn):
    print("lines Ru: "+  str(len(resultTextRu)) + "\nlines En: "+  str(len(resultTextEn)))
    print("Ok process! Go to next steps...")
else:
    print("Problem! Lines in En and Ru files are different...")
    raise SystemExit

outputText = ""
#Get max ID of subcategoryies, and increment it for last adding subcategory
x.execute("SELECT * FROM WebSofter_studilla.category ORDER BY category_id DESC LIMIT 0, 1")
data = x.fetchall()
for row in data :
    currentId = (int(row[0]) + 1)
    
try:
    for i in range(len(resultTextRu)):
        outputText +=resultTextRu[i] + "->" + resultTextEn[i] + "\n"
        #Add new subcategory
        x.execute("""INSERT INTO WebSofter_studilla.category VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s)""",
                (currentId, '', parentId, 0, 1, 0, 1, time.strftime('%Y-%m-%d %H:%M:%S'), time.strftime('%Y-%m-%d %H:%M:%S')))
        lastId = currentId
        #Add Rus lang for subcategory
        x.execute("""INSERT INTO WebSofter_studilla.category_description VALUES(%s, %s, %s, %s, %s, %s, %s)""",
        (lastId, 2, resultTextRu[i], "", resultTextRu[i], "", ""))
        #Add Eng lang for subcategory
        x.execute("""INSERT INTO WebSofter_studilla.category_description VALUES(%s, %s, %s, %s, %s, %s, %s)""",
        (lastId, 1, resultTextEn[i], "", resultTextEn[i], "", ""))
        #Path for level 0 in admin panel
        x.execute("""INSERT INTO WebSofter_studilla.category_path VALUES(%s, %s, %s)""",
        (lastId, rootId, 0))
        #Path for level 1 in admin panel
        x.execute("""INSERT INTO WebSofter_studilla.category_path VALUES(%s, %s, %s)""",
        (lastId, parentId, 1))
        #Path for level 2 in admin panel
        x.execute("""INSERT INTO WebSofter_studilla.category_path VALUES(%s, %s, %s)""",
        (lastId, lastId, 2))
        #Add Layout
        x.execute("""INSERT INTO WebSofter_studilla.category_to_layout VALUES(%s, %s, %s)""",
        (lastId, 0, 0))
        #Add in public side of site
        x.execute("""INSERT INTO WebSofter_studilla.category_to_store VALUES(%s, %s)""",
        (lastId, 0))
        print(lastId)
        #Increment added ID for next subcategory
        currentId += 1
    print(outputText)
    conn.commit()
except:
   conn.rollback()

conn.close()<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1">​</span>
'''
    Read from files, print and count category items in specify tags
'''
import re
tagName = "span"

fileRu = open("files/file-ru.html", mode="r", encoding="utf-8")
fileStringRu = fileRu.read()
fileEn = open("files/file-en.html", mode="r", encoding="utf-8")
fileStringEn = fileEn.read()

pattern = r"(?<=\<"+tagName+"\>)(\s*.*\s*)(?=\<\/"+tagName+"\>)"
resultTextRu = re.findall(pattern, fileStringRu)
resultTextEn = re.findall(pattern, fileStringEn)

outputText = ""
i = 0
for itemRu in resultTextRu:
    outputText +=itemRu + "->"+ resultTextEn[i] +"\n"
    i +=1
print(outputText)

if len(resultTextRu)==len(resultTextEn):
    print("lines Ru: "+  str(len(resultTextRu)) + "\nlines En: "+  str(len(resultTextEn)))
    print("Ok process! Got to next steps...")
else:
    print("Problem! Lines in En and Ru files are different...")
    raise SystemExit
<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1">​</span>
<element>
	<element>
		<ul class="dropdown-menu" role="menu"
			style="max-height: 53px; overflow-y: auto; min-height: 81px;">
			<li rel="1">
				<a tabindex="-1" href="#" class="">
					<span>Algebra</span>
				</a>
			</li>
			<li rel="2">
				<a tabindex="-1" href="#" class="">
					<span>Analytical geometry</span>
				</a>
			</li>
			<li rel="3">
				<a tabindex="-1" href="#" class="">
					<span>Vector algebra</span>
				</a>
			</li>
			<li rel="4">
				<a tabindex="-1" href="#" class="">
					<span>Higher mathematics</span>
				</a>
			</li>
			<li rel="5">
				<a tabindex="-1" href="#" class="">
					<span>Computational mathematics</span>
				</a>
			</li>
			<li rel="6">
				<a tabindex="-1" href="#" class="">
					<span>Geometry</span>
				</a>
			</li>
			<li rel="7">
				<a tabindex="-1" href="#" class="">
					<span>Discrete mathematics</span>
				</a>
			</li>
			<li rel="8">
				<a tabindex="-1" href="#" class="">
					<span>Differential geometry</span>
				</a>
			</li>
			<li rel="9">
				<a tabindex="-1" href="#" class="">
					<span>Differential equations</span>
				</a>
			</li>
			<li rel="10">
				<a tabindex="-1" href="#" class="">
					<span>Operations Research</span>
				</a>
			</li>
			<li rel="11">
				<a tabindex="-1" href="#" class="">
					<span>Linear algebra</span>
				</a>
			</li>
			<li rel="12">
				<a tabindex="-1" href="#" class="">
					<span>Linear programming</span>
				</a>
			</li>
			<li rel="13">
				<a tabindex="-1" href="#" class="">
					<span>Logic</span>
				</a>
			</li>
			<li rel="14">
				<a tabindex="-1" href="#" class="">
					<span>Mathematical statistics</span>
				</a>
			</li>
			<li rel="15">
				<a tabindex="-1" href="#" class="">
					<span>Mathematical methods in Economics</span>
				</a>
			</li>
			<li rel="16">
				<a tabindex="-1" href="#" class="">
					<span>
						Mathematical foundations of systems theory
					</span>
				</a>
			</li>
			<li rel="17">
				<a tabindex="-1" href="#" class="">
					<span>Mathematical analysis</span>
				</a>
			</li>
			<li rel="18">
				<a tabindex="-1" href="#" class="">
					<span>Methods of optimization</span>
				</a>
			</li>
			<li rel="19">
				<a tabindex="-1" href="#" class="">
					<span>Insurance mathematics</span>
				</a>
			</li>
			<li rel="20">
				<a tabindex="-1" href="#" class="">
					<span>Theory of algorithms and automata</span>
				</a>
			</li>
			<li rel="21">
				<a tabindex="-1" href="#" class="">
					<span>
						Theory of probability and statistics
					</span>
				</a>
			</li>
			<li rel="22">
				<a tabindex="-1" href="#" class="">
					<span>Game Theory</span>
				</a>
			</li>
			<li rel="23">
				<a tabindex="-1" href="#" class="">
					<span>Information Theory</span>
				</a>
			</li>
			<li rel="24">
				<a tabindex="-1" href="#" class="">
					<span>Set Theory</span>
				</a>
			</li>
			<li rel="25">
				<a tabindex="-1" href="#" class="">
					<span>Optimal Control Theory</span>
				</a>
			</li>
			<li rel="26">
				<a tabindex="-1" href="#" class="">
					<span>Decision Theory</span>
				</a>
			</li>
			<li rel="27">
				<a tabindex="-1" href="#" class="">
					<span>Theory of random processes</span>
				</a>
			</li>
			<li rel="28">
				<a tabindex="-1" href="#" class="">
					<span>complex analysis</span>
				</a>
			</li>
			<li rel="29">
				<a tabindex="-1" href="#" class="">
					<span>Topology</span>
				</a>
			</li>
			<li rel="30">
				<a tabindex="-1" href="#" class="">
					<span>Financial mathematics</span>
				</a>
			</li>
			<li rel="31">
				<a tabindex="-1" href="#" class="">
					<span>Physical mathematics</span>
				</a>
			</li>
			<li rel="32">
				<a tabindex="-1" href="#" class="">
					<span>Functional analysis</span>
				</a>
			</li>
			<li rel="33">
				<a tabindex="-1" href="#" class="">
					<span>Numerical methods</span>
				</a>
			</li>
			<li rel="34">
				<a tabindex="-1" href="#" class="">
					<span>Econometrics</span>
				</a>
			</li>
			<li rel="35">
				<a tabindex="-1" href="#" class="">
					<span>More</span>
				</a>
			</li>
		</ul>
	</element>
</element><span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1">​</span>
<element>
	<ul class="dropdown-menu" role="menu"
		style="max-height: 53px; overflow-y: auto; min-height: 81px;">
		<li rel="1">
			<a tabindex="-1" href="#" class="">
				<span>Алгебра</span>
			</a>
		</li>
		<li rel="2">
			<a tabindex="-1" href="#" class="">
				<span>Аналитическая геометрия</span>
			</a>
		</li>
		<li rel="3">
			<a tabindex="-1" href="#" class="">
				<span>Векторная алгебра</span>
			</a>
		</li>
		<li rel="4">
			<a tabindex="-1" href="#" class="">
				<span>Высшая математика</span>
			</a>
		</li>
		<li rel="5">
			<a tabindex="-1" href="#" class="">
				<span>Вычислительная математика</span>
			</a>
		</li>
		<li rel="6">
			<a tabindex="-1" href="#" class="">
				<span>Геометрия</span>
			</a>
		</li>
		<li rel="7">
			<a tabindex="-1" href="#" class="">
				<span>Дискретная математика</span>
			</a>
		</li>
		<li rel="8">
			<a tabindex="-1" href="#" class="">
				<span>Дифференциальная геометрия</span>
			</a>
		</li>
		<li rel="9">
			<a tabindex="-1" href="#" class="">
				<span>Дифференциальные уравнения</span>
			</a>
		</li>
		<li rel="10">
			<a tabindex="-1" href="#" class="">
				<span>Исследование операций</span>
			</a>
		</li>
		<li rel="11">
			<a tabindex="-1" href="#" class="">
				<span>Линейная алгебра</span>
			</a>
		</li>
		<li rel="12">
			<a tabindex="-1" href="#" class="">
				<span>Линейное программирование</span>
			</a>
		</li>
		<li rel="13">
			<a tabindex="-1" href="#" class="">
				<span>Логика</span>
			</a>
		</li>
		<li rel="14">
			<a tabindex="-1" href="#" class="">
				<span>Математическая статистика</span>
			</a>
		</li>
		<li rel="15">
			<a tabindex="-1" href="#" class="">
				<span>Математические методы в экономике</span>
			</a>
		</li>
		<li rel="16">
			<a tabindex="-1" href="#" class="">
				<span>Математические основы теории систем</span>
			</a>
		</li>
		<li rel="17">
			<a tabindex="-1" href="#" class="">
				<span>Математический анализ</span>
			</a>
		</li>
		<li rel="18">
			<a tabindex="-1" href="#" class="">
				<span>Методы оптимизации</span>
			</a>
		</li>
		<li rel="19">
			<a tabindex="-1" href="#" class="">
				<span>Страховая математика</span>
			</a>
		</li>
		<li rel="20">
			<a tabindex="-1" href="#" class="">
				<span>Теория алгоритмов и автоматов</span>
			</a>
		</li>
		<li rel="21">
			<a tabindex="-1" href="#" class="">
				<span>Теория вероятности и мат. cтатистика</span>
			</a>
		</li>
		<li rel="22">
			<a tabindex="-1" href="#" class="">
				<span>Теория игр</span>
			</a>
		</li>
		<li rel="23">
			<a tabindex="-1" href="#" class="">
				<span>Теория информации</span>
			</a>
		</li>
		<li rel="24">
			<a tabindex="-1" href="#" class="">
				<span>Теория множеств</span>
			</a>
		</li>
		<li rel="25">
			<a tabindex="-1" href="#" class="">
				<span>Теория оптимального управления</span>
			</a>
		</li>
		<li rel="26">
			<a tabindex="-1" href="#" class="">
				<span>Теория принятия решений</span>
			</a>
		</li>
		<li rel="27">
			<a tabindex="-1" href="#" class="">
				<span>Теория случайных процессов</span>
			</a>
		</li>
		<li rel="28">
			<a tabindex="-1" href="#" class="">
				<span>ТФКП</span>
			</a>
		</li>
		<li rel="29">
			<a tabindex="-1" href="#" class="">
				<span>Топология</span>
			</a>
		</li>
		<li rel="30">
			<a tabindex="-1" href="#" class="">
				<span>Финансовая математика</span>
			</a>
		</li>
		<li rel="31">
			<a tabindex="-1" href="#" class="">
				<span>Физическая математика</span>
			</a>
		</li>
		<li rel="32">
			<a tabindex="-1" href="#" class="">
				<span>Функциональный анализ</span>
			</a>
		</li>
		<li rel="33">
			<a tabindex="-1" href="#" class="">
				<span>Численные методы</span>
			</a>
		</li>
		<li rel="34">
			<a tabindex="-1" href="#" class="">
				<span>Эконометрика</span>
			</a>
		</li>
		<li rel="35">
			<a tabindex="-1" href="#" class="">
				<span>Другое</span>
			</a>
		</li>
	</ul>
</element><span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1">​</span>

Ссылка на репозиторий на GitHub OpenCat

 

Пожалуйста, оцените материал

WebSofter

Web - технологии