1.1 Huge refractor, save multiple csvs as one xml
This commit is contained in:
@@ -1,11 +1,5 @@
|
|||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
if exist %1\* (
|
python %~dp0\BudaPortaXmlConvert.py %1
|
||||||
for /R "%1" %%f in (*.csv) do ( python %~dp0\BudaPortaXmlConvert.py "%%f")
|
|
||||||
@REM for /f %%a IN ('dir /b /s %1') do python %~dp0\BudaPortaXmlConvert.py "%%a"
|
|
||||||
@REM echo Directory
|
|
||||||
) else (
|
|
||||||
python %~dp0\BudaPortaXmlConvert.py %1
|
|
||||||
)
|
|
||||||
|
|
||||||
pause
|
pause
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# BudaPortaXmlConvert
|
# BudaPortaXmlConvert
|
||||||
# Version: 1.0
|
# Version: 1.1
|
||||||
# License: GNU LGPLv3
|
# License: GNU LGPLv3
|
||||||
# Maintainer: Peter Gyetvai - gyetpet@mailbox.org
|
# Maintainer: Peter Gyetvai - gyetpet@mailbox.org
|
||||||
# Repo: https://git.gyetvaipeter.hu/infeeeee/budaporta-xml
|
# Repo: https://git.gyetvaipeter.hu/infeeeee/budaporta-xml
|
||||||
@@ -12,62 +12,46 @@ import csv
|
|||||||
import datetime
|
import datetime
|
||||||
import os
|
import os
|
||||||
|
|
||||||
# --------------------------------- Read arg --------------------------------- #
|
|
||||||
if len(sys.argv) != 2:
|
|
||||||
raise ValueError('Fájl hiányzik!')
|
|
||||||
csvPath = sys.argv[1]
|
|
||||||
print(f'Fájl olvasása: {csvPath}')
|
|
||||||
folder = os.path.dirname(csvPath)
|
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------- #
|
||||||
|
# Function #
|
||||||
|
# ---------------------------------------------------------------------------- #
|
||||||
|
|
||||||
# --------------------------------- Read csv --------------------------------- #
|
# Finds the number of column
|
||||||
|
|
||||||
csvArr = []
|
|
||||||
if os.path.isdir(csvPath):
|
|
||||||
os.listdir(csvPath)
|
|
||||||
else:
|
|
||||||
with open(csvPath, newline='') as csvfile:
|
|
||||||
incsv = csv.reader(csvfile, delimiter=';')
|
|
||||||
for row in incsv:
|
|
||||||
csvArr.append(row)
|
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------- Find column numbers --------------------------- #
|
|
||||||
|
|
||||||
def findColumn(text, array):
|
def findColumn(text, array):
|
||||||
for i, elem in enumerate(array):
|
for i, elem in enumerate(array):
|
||||||
if elem == text:
|
if elem == text:
|
||||||
return i
|
return i
|
||||||
raise ValueError('Oszlop nem található!' + text)
|
raise ValueError('Oszlop nem található!' + text)
|
||||||
|
|
||||||
|
# Finds all column numbers, returns an array of positions
|
||||||
|
|
||||||
requiredData = ['Notes', 'Meter n°', 'Reading', 'Reading data']
|
|
||||||
dataColNumbers = []
|
def findColumnNumbers(csvHeaderArray, requiredHeaders):
|
||||||
print()
|
colNumbers = []
|
||||||
for col in requiredData:
|
for col in requiredHeaders:
|
||||||
colnum = findColumn(col, csvArr[0])
|
colnum = findColumn(col, csvHeaderArray)
|
||||||
print(f'"{col}" oszlop sorszáma: {colnum}')
|
print(f'"{col}" oszlop sorszáma: {colnum}')
|
||||||
dataColNumbers.append(colnum)
|
colNumbers.append(colnum)
|
||||||
|
print()
|
||||||
|
return colNumbers
|
||||||
|
|
||||||
|
# Gets the data from all rows, based on column numbers:
|
||||||
|
|
||||||
|
|
||||||
# print(dataColNumbers)
|
def getReqData(csvRows, colNumbers):
|
||||||
|
outData = []
|
||||||
# ----------------------------- Get required data ---------------------------- #
|
for row in csvRows:
|
||||||
|
|
||||||
outData = []
|
|
||||||
csvArr.pop(0)
|
|
||||||
for row in csvArr:
|
|
||||||
dict1 = {}
|
dict1 = {}
|
||||||
for i, reqCol in enumerate(dataColNumbers):
|
for i, reqCol in enumerate(colNumbers):
|
||||||
dict1[requiredData[i]] = row[reqCol]
|
dict1[requiredData[i]] = row[reqCol]
|
||||||
outData.append(dict1)
|
outData.append(dict1)
|
||||||
|
return outData
|
||||||
|
|
||||||
# print(outData)
|
|
||||||
|
|
||||||
# --------------------- Convert data to required formats --------------------- #
|
def getXmlData(data):
|
||||||
|
xmlData = []
|
||||||
xmlData = []
|
for dict in data:
|
||||||
for dict in outData:
|
|
||||||
theDate = datetime.datetime.strptime(
|
theDate = datetime.datetime.strptime(
|
||||||
dict["Reading data"], '%d. %m. %Y %H:%M:%S')
|
dict["Reading data"], '%d. %m. %Y %H:%M:%S')
|
||||||
xmlDict = {
|
xmlDict = {
|
||||||
@@ -81,20 +65,108 @@ for dict in outData:
|
|||||||
"TenyLeoIdo": theDate.strftime('%H%M%S')
|
"TenyLeoIdo": theDate.strftime('%H%M%S')
|
||||||
}
|
}
|
||||||
xmlData.append(xmlDict)
|
xmlData.append(xmlDict)
|
||||||
|
return xmlData
|
||||||
|
|
||||||
# -------------------------------- Check data -------------------------------- #
|
|
||||||
|
|
||||||
print()
|
def checkData(xmlData):
|
||||||
print('Adatok ellenőrzése')
|
print()
|
||||||
for mérő in xmlData:
|
missingData = False
|
||||||
|
for mérő in xmlData:
|
||||||
for adat in mérő:
|
for adat in mérő:
|
||||||
if len(mérő[adat]) == 0:
|
if len(mérő[adat]) == 0:
|
||||||
|
missingData = True
|
||||||
print(f'Adat hiányzik: "{adat}" a következő sorból:')
|
print(f'Adat hiányzik: "{adat}" a következő sorból:')
|
||||||
print(mérő)
|
print(mérő)
|
||||||
|
return missingData
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------- #
|
||||||
|
# Code #
|
||||||
|
# ---------------------------------------------------------------------------- #
|
||||||
|
|
||||||
|
|
||||||
|
requiredData = ['Notes', 'Meter n°', 'Reading', 'Reading data']
|
||||||
|
|
||||||
|
# --------------------------------- Read arg --------------------------------- #
|
||||||
|
if len(sys.argv) != 2:
|
||||||
|
raise ValueError('Útvonal hiányzik!')
|
||||||
|
csvPath = sys.argv[1]
|
||||||
|
print(f'Útvonal olvasása: {csvPath}')
|
||||||
|
folder = os.path.dirname(csvPath)
|
||||||
|
|
||||||
|
# --------------------------------- Read csv --------------------------------- #
|
||||||
|
|
||||||
|
csvArrs = []
|
||||||
|
csvFileNames = []
|
||||||
|
if os.path.isdir(csvPath):
|
||||||
|
folder = csvPath
|
||||||
|
print(f'Fájlok a mappában: {os.listdir(csvPath)}')
|
||||||
|
for i, file in enumerate(os.listdir(csvPath)):
|
||||||
|
csvFileNames.append(file)
|
||||||
|
with open(os.path.join(csvPath, file), newline='') as csvfile:
|
||||||
|
incsv = csv.reader(csvfile, delimiter=';')
|
||||||
|
csvArrs.append([])
|
||||||
|
|
||||||
|
for row in incsv:
|
||||||
|
csvArrs[i].append(row)
|
||||||
|
|
||||||
|
else:
|
||||||
|
csvFileNames[0] = csvPath
|
||||||
|
with open(csvPath, newline='') as csvfile:
|
||||||
|
incsv = csv.reader(csvfile, delimiter=';')
|
||||||
|
csvArrs[0] = []
|
||||||
|
for row in incsv:
|
||||||
|
csvArrs[0].append(row)
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------- Find column numbers --------------------------- #
|
||||||
|
|
||||||
|
# Get the number of each column:
|
||||||
|
dataColNumbers = []
|
||||||
|
for i, table in enumerate(csvArrs):
|
||||||
|
print(f'Oszlopok keresése: {csvFileNames[i]}:')
|
||||||
|
dataColNumbers.append(findColumnNumbers(table[0], requiredData))
|
||||||
|
|
||||||
|
# ----------------------------- Get required data ---------------------------- #
|
||||||
|
|
||||||
|
# Remove headers from csv:
|
||||||
|
for table in csvArrs:
|
||||||
|
table.pop(0)
|
||||||
|
|
||||||
|
# Get data based on column numbers:
|
||||||
|
reqData = []
|
||||||
|
for i, table in enumerate(csvArrs):
|
||||||
|
reqData.append(getReqData(table, dataColNumbers[i]))
|
||||||
|
|
||||||
|
# ---------------- Convert to required formats and check data ---------------- #
|
||||||
|
|
||||||
|
# get only required for xml, fill static values
|
||||||
|
xmlReqData = []
|
||||||
|
for i, table in enumerate(reqData):
|
||||||
|
print(f'Fájl ellenőrzése: {csvFileNames[i]}')
|
||||||
|
currXmlData = getXmlData(table)
|
||||||
|
if not checkData(currXmlData):
|
||||||
|
print('Fájl hibátlan')
|
||||||
print()
|
print()
|
||||||
|
xmlReqData.append(currXmlData)
|
||||||
|
|
||||||
|
# print(xmlReqData)
|
||||||
|
# for i in xmlReqData:
|
||||||
|
# print(i)
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------- Merge arrays ------------------------------- #
|
||||||
|
|
||||||
|
allXmlData = []
|
||||||
|
for array in xmlReqData:
|
||||||
|
for mérő in array:
|
||||||
|
allXmlData.append(mérő)
|
||||||
|
|
||||||
|
for i in allXmlData:
|
||||||
|
print(i)
|
||||||
|
|
||||||
# ----------------------------- Generate filename ---------------------------- #
|
# ----------------------------- Generate filename ---------------------------- #
|
||||||
|
|
||||||
|
|
||||||
now = datetime.datetime.now()
|
now = datetime.datetime.now()
|
||||||
fileNameBase = 'SZLA_' + now.strftime('%Y%m%d%H%M%S') + '_'
|
fileNameBase = 'SZLA_' + now.strftime('%Y%m%d%H%M%S') + '_'
|
||||||
fileNameNotFound = True
|
fileNameNotFound = True
|
||||||
@@ -113,7 +185,7 @@ print()
|
|||||||
# --------------------------------- Write xml -------------------------------- #
|
# --------------------------------- Write xml -------------------------------- #
|
||||||
|
|
||||||
data = ET.Element('Leolvasasok')
|
data = ET.Element('Leolvasasok')
|
||||||
for mérő in xmlData:
|
for mérő in allXmlData:
|
||||||
currSub = ET.SubElement(data, 'Leolvasas')
|
currSub = ET.SubElement(data, 'Leolvasas')
|
||||||
for adat in mérő:
|
for adat in mérő:
|
||||||
a = ET.SubElement(currSub, adat)
|
a = ET.SubElement(currSub, adat)
|
||||||
|
|||||||
9
BudaPortaXmlConvertSeparate.bat
Normal file
9
BudaPortaXmlConvertSeparate.bat
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
if exist %1\* (
|
||||||
|
for /R "%1" %%f in (*.csv) do ( python %~dp0\BudaPortaXmlConvert.py "%%f")
|
||||||
|
) else (
|
||||||
|
python %~dp0\BudaPortaXmlConvert.py %1
|
||||||
|
)
|
||||||
|
|
||||||
|
pause
|
||||||
Reference in New Issue
Block a user