Dein Vorschlag funktionierte, danke dafür.
Gibt es denn noch einen Weg, die file-Eingabe mitzuzählen, damit man diese Zählung vllt weiter unten einbeziehen könnte?
Meiner Ansicht nach, habe ich das so geöffnet, weil die Datei eben keine Spalteninfos enthält, was bis jetzt immer zu einem Fehler bzgl der Zuweisung ergab, da die Dateien nur einfache .txt-Dateien sind.
Das mit raw_input war ein Google-Vorschlag, daher habe ich dies einfach übernommen, genauso wie daraus das mit dem Leerzeichen beim Gleichheitszeichen entstand.
Das mit der numpy-Umwandlung resulierte daraus, dass ich im folgenden mit auch vorgegebenen Werten rechnen muss, das verschluckt sich mit der pandas-Tabelle aufgrund des Index(jegliche Bearbeitung führte zu keinem Erfolg).
Erkennbar, vllt am gesamten Code:
Code: Alles auswählen
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path
#Dateien einlesen + Speicherort angeben -------------------------------------------------------------------------------------
def import_and_short():
file_paths = [path
for path in directory_path.iterdir()
if path.is_file() and path.suffix in [".txt", ".csv"]]
#
# Kürzen auf die benötigten Daten (nur Detektorsignal gegen Zeit)--------------------------------------------------
#
for file_path in file_paths:
with file_path.open("r", encoding="ascii") as file:
lines = list(file)
first_line_index = (lines.index('[Compound Results(Detector A)]\n') + 3)
last_line_index = (lines.index('[Compound Results(PDA)]\n') - 1)
with (save_path / "Test" / file_path.name).open("w", encoding="ascii") as file:
file.writelines(lines[first_line_index:last_line_index])
file.close()
return file_paths
if __name__ == "__main__":
directory_path = Path("./Ordner")
save_path = Path(".")
files = import_and_short()
Code: Alles auswählen
def write_all(file):
data = pd.read_csv('./Test/' + file, sep='\s+' , decimal = ',', names = ['ID', 'Name', 'R.Time', 'Area', 'Height', 'Conc.','Curve', '3rd', '2nd', '1st', 'Constant', 'Area Ratio', 'Height Ratio', 'Conc. %', 'Norm Conc.'])
name = np.array(data['Name'])
conc = np.array(data['Conc.'])
info_df = {"Name": name, "Conc. mg/g": conc}
df = pd.DataFrame(data = info_df)
select_sorbitol = df.loc[df['Name'] == 'Sorbitol']
select_isosorbid = df.loc[df['Name'] == 'Isosorbitol']
select_sorbitol.to_csv("Sorbitol.csv", mode = "a", header = False, sep = ";")
select_isosorbid.to_csv("Isosorbid.csv", mode = "a", header = False, sep = ";")
Code: Alles auswählen
while True:
file = input()
if not file:
break
write_all(file)
Code: Alles auswählen
data_sorbitol = np.genfromtxt("Sorbitol.csv", delimiter = ";")
data_isosorbid = np.genfromtxt("Isosorbid.csv", delimiter = ";")
x, name, conc_sorbitol = data_sorbitol.T
x, name, conc_isosorbid = data_isosorbid.T
m_sorbitol = 2000#Abfrage in mg
m_ansatz = 22.4#Abfrage in g
start_sorbitol = np.array([m_sorbitol / m_ansatz])
start_isosorbid = np.array([0])
sorbitol_conc = np.concatenate((start_sorbitol, conc_sorbitol))
isosorbid_conc = np.concatenate((start_isosorbid, conc_isosorbid))
print(sorbitol_conc)
print(isosorbid_conc)
Code: Alles auswählen
t = np.array([0, 1, 3, 6])
mw_sorbitol = 182.17
n_sorbitol = m_sorbitol / mw_sorbitol
mw_isosorbid = 146.14
m_isosorbid_soll = mw_isosorbid * n_sorbitol
m_gesamt_sorbitol = m_ansatz * sorbitol_conc
m_gesamt_isosorbid = m_ansatz * isosorbid_conc
ausbeute_sorbitol = m_gesamt_sorbitol / m_sorbitol * 100
ausbeute_isosorbid = m_gesamt_isosorbid / m_isosorbid_soll * 100
print(ausbeute_sorbitol)
plt.plot(t, ausbeute_sorbitol)
Ja mir sind Sachen wie m_, n_ und t bewusst, dennoch werde ich da erstmal nichts dran ändern, da dies die Fachsprache für den Nutzen des Programms darstellt.
Für sonstige Verbesserung gerne immer her damit
Grüße