Typ der Spalte nach dem Einlesen in String konvertiert. Ansonsten geht der dataframe merge nicht.
This commit is contained in:
@@ -15,7 +15,6 @@ dist/
|
|||||||
downloads/
|
downloads/
|
||||||
eggs/
|
eggs/
|
||||||
.eggs/
|
.eggs/
|
||||||
lib/
|
|
||||||
lib64/
|
lib64/
|
||||||
parts/
|
parts/
|
||||||
sdist/
|
sdist/
|
||||||
|
|||||||
@@ -7,9 +7,11 @@ set SIVASPRICES_CFG=%SIVASPRICES%\cfg
|
|||||||
set SIVASPRICES_LIB=%SIVASPRICES%\lib
|
set SIVASPRICES_LIB=%SIVASPRICES%\lib
|
||||||
set SIVASPRICES_DATA=%SIVASPRICES%\data
|
set SIVASPRICES_DATA=%SIVASPRICES%\data
|
||||||
set SIVASPRICES_WORK=%SIVASPRICES%\work
|
set SIVASPRICES_WORK=%SIVASPRICES%\work
|
||||||
|
set SIVASPRICES_OUT=%SIVASPRICES%\out
|
||||||
set SIVASPRICES_LOG=%SIVASPRICES%\log
|
set SIVASPRICES_LOG=%SIVASPRICES%\log
|
||||||
|
|
||||||
if not exist %SIVASPRICES%\work mkdir %SIVASPRICES%\work
|
if not exist %SIVASPRICES%\work mkdir %SIVASPRICES%\work
|
||||||
|
if not exist %SIVASPRICES%\out mkdir %SIVASPRICES%\out
|
||||||
if not exist %SIVASPRICES%\log mkdir %SIVASPRICES%\log
|
if not exist %SIVASPRICES%\log mkdir %SIVASPRICES%\log
|
||||||
|
|
||||||
set PATH=%SIVASPRICES%\bin;%PATH%
|
set PATH=%SIVASPRICES%\bin;%PATH%
|
||||||
|
|||||||
Binary file not shown.
@@ -0,0 +1,8 @@
|
|||||||
|
numpy==1.26.1
|
||||||
|
pandas==2.1.1
|
||||||
|
python-dateutil==2.8.2
|
||||||
|
pytz==2023.3.post1
|
||||||
|
six==1.16.0
|
||||||
|
tzdata==2023.3
|
||||||
|
et-xmlfile==1.1.0
|
||||||
|
openpyxl==3.1.2
|
||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
import pandas as pd
|
||||||
|
from io import StringIO
|
||||||
|
|
||||||
|
#df1 = pd.DataFrame({'Teilenummer': ['709000031_A', '825304002', '825304003', '825304004', '825304006', '825304007', '825304008', '0_A3000020'],
|
||||||
|
#'Laufende Materialkosten': [43.22, 26.19, 30.49, 25.85, 32.35, 23.99, 19.25, 0] })
|
||||||
|
#df2 = pd.DataFrame({'Teilenummer':['825304002', '709000031_A']})
|
||||||
|
df1 = pd.read_json(
|
||||||
|
'''{"Teilenummer":{"0":"709000031_A","1":"825304002","2":"825304003","3":"825304004","4":"825304006","5":"825304007","6":"825304008","7":"0_A3000020"},
|
||||||
|
"Laufende Materialkosten":{"0":43.22,"1":26.19,"2":30.49,"3":25.8547,"4":32.3574812376,"5":23.99,"6":19.25,"7":null}}'''
|
||||||
|
)
|
||||||
|
df2 = pd.read_json(
|
||||||
|
'''{"Teilenummer":{"0":825304002,"1":"709000031_A"}}'''
|
||||||
|
)
|
||||||
|
print(df1.dtypes)
|
||||||
|
print(df2.dtypes)
|
||||||
|
df1['Teilenummer'] = df1['Teilenummer'].astype(str)
|
||||||
|
df2['Teilenummer'] = df2['Teilenummer'].astype(str)
|
||||||
|
print(df1.dtypes)
|
||||||
|
print(df2.dtypes)
|
||||||
|
#print(df1)
|
||||||
|
#print(df2)
|
||||||
|
#print(df1.to_json())
|
||||||
|
#print(df2.to_json())
|
||||||
|
newdf = df1.merge(df2, on='Teilenummer', how='inner')
|
||||||
|
print(newdf)
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
"""
|
||||||
|
Dieses Programm kann:
|
||||||
|
- eine Excel-Datei exportieren, in der alle aktualisierten Preise der Excel Datei aus dme work Ordner enthalten sind
|
||||||
|
"""
|
||||||
|
|
||||||
|
class Fetch:
|
||||||
|
|
||||||
|
datafile = 'grid_export.xlsx'
|
||||||
|
lib_dir = os.environ.get('SIVASPRICES_LIB')
|
||||||
|
data_dir = os.environ.get('SIVASPRICES_DATA')
|
||||||
|
in_dir = os.environ.get('SIVASPRICES_WORK')
|
||||||
|
out_dir = os.environ.get('SIVASPRICES_OUT')
|
||||||
|
sivas_prices_xls_path = os.path.join(data_dir, datafile)
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.read_grid_export()
|
||||||
|
|
||||||
|
def process(self, inputfile):
|
||||||
|
df_to_search_ids = self.read_inputfile(inputfile)
|
||||||
|
self.create_excel_export(df_to_search_ids)
|
||||||
|
|
||||||
|
|
||||||
|
def read_grid_export(self):
|
||||||
|
# liest die XLS-Datei ein, in der alle Preise des kompletten Teilestamms enthalten sind
|
||||||
|
# mit Teilenummer, Bezeichnung 1 und Laufende Materialkosten
|
||||||
|
try:
|
||||||
|
#self._sivas_df = pd.read_excel(self.sivas_prices_xls_path, usecols=["Teilenummer", "Bezeichnung1", "Laufende Materialkosten"])
|
||||||
|
self._sivas_df = pd.read_excel(self.sivas_prices_xls_path)
|
||||||
|
self._sivas_df['Teilenummer'] = self._sivas_df['Teilenummer'].astype(str)
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
# XLSX-Datei wurde noch nicht ins %SIVASPRICES_WORK% kopiert
|
||||||
|
print(f"FAILED: '{Fetch.datafile}' nicht gefunden. sollte im '{Fetch.in_dir}' liegen ...")
|
||||||
|
|
||||||
|
def read_inputfile(self, inputfile):
|
||||||
|
# Methode liest die Sivas Ids der Eingabedatei, um festzustellen welche Preise gesucht werden.
|
||||||
|
try:
|
||||||
|
df = pd.read_excel(inputfile, sheet_name='Kaufteile', usecols=["Teilenummer"])
|
||||||
|
df['Teilenummer'] = df['Teilenummer'].astype(str)
|
||||||
|
return df
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
print(f"FAILED: '{inputfile}' nicht gefunden. sollte im '{Fetch.data_dir}' liegen ...")
|
||||||
|
return pd.DataFrame()
|
||||||
|
except ValueError:
|
||||||
|
print(f"FAILED: Spalte 'Teilenummer' nicht gefunden")
|
||||||
|
return pd.DataFrame()
|
||||||
|
|
||||||
|
|
||||||
|
def create_excel_export(self, df_to_search_sivas_ids:pd.DataFrame, outfile):
|
||||||
|
# Spalten in Excel-Datei: Teilenummer, Bezeichnung, Preis
|
||||||
|
|
||||||
|
df_merged = self._sivas_df.merge(df_to_search_sivas_ids, how='inner', on='Teilenummer')
|
||||||
|
df_merged.set_index('Teilenummer')
|
||||||
|
df_merged.to_excel(outfile, index=False)
|
||||||
|
print(f"OK: Excel-Datei erfolgreich in '{Fetch.out_dir}' geschrieben...")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
parser = argparse.ArgumentParser(description='Das Programm holt die speziell gewünschten Preise aus der data/grid_export.xlsx ', prog='update_prices')
|
||||||
|
parser.add_argument('-a', '--all', action='store_true', help='Erzeugt Excel-Dateien für alle Teilenummern in allen .xlsx Files im Work Ordner')
|
||||||
|
parser.add_argument('-e', '--excel', action='store', help='Erzeugt Excel-Datei in der alle Teilenummern, die migriert werden müssen, aufgelistet sind')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
if args.excel:
|
||||||
|
fetch = Fetch()
|
||||||
|
fetch.process(args.excel)
|
||||||
|
elif args.all:
|
||||||
|
all_files = os.listdir(os.environ.get('SIVASPRICES_WORK'))
|
||||||
|
fetch = Fetch()
|
||||||
|
in_dir = os.environ.get('SIVASPRICES_WORK')
|
||||||
|
out_dir = os.environ.get('SIVASPRICES_OUT')
|
||||||
|
for myfile in all_files:
|
||||||
|
if not myfile.endswith(".xlsx"):
|
||||||
|
continue
|
||||||
|
input_xlsx = os.path.join(in_dir, myfile)
|
||||||
|
output_xlsx = os.path.join(out_dir, 'updated_'+myfile)
|
||||||
|
df_to_search_ids = fetch.read_inputfile(input_xlsx)
|
||||||
|
if df_to_search_ids.empty:
|
||||||
|
continue
|
||||||
|
fetch.create_excel_export(df_to_search_ids, output_xlsx)
|
||||||
|
else:
|
||||||
|
parser.print_help()
|
||||||
Reference in New Issue
Block a user