Hallo zusammen,
Bei der Schreibung eines Programms ist mir ein kleiner Fehler unterlaufen, sodass ein Text wrapper erstellt wurde. Jetzt wird dieser aber immer verwendet, obwohl ich eine txt Datei erstellt habe. Ich bin frustriert, ich habe schon alles ausprobiert.
Soll ich vielleicht das komplette Programm hier mal einschicken? Ist nur kurz, vlt 50 Zeilen.
Mfg
Christian
Text wrapper löschen/deaktivieren
l='abrufen'
m='hinzufügen'
c='.txt'
print ("Das ist meine Datenbank verschiedener Deepsky Objekte")
print ("Möchtest du eine Information hinzufügen oder abrufen?")
x=str(input())
if x==l:
print ("Welches Objekt möchtest du abrufen? Bitte Namen oder Katalog-Nummer nennen")
o=str(input())
path = 'C:/Users/chris/Desktop/Objekte/'
filename = o
file = open ('C:/Users/chris/Desktop/Objekte/'+o+'/', 'r')
print (file.read)
b = input()
print (b)
if x==m:
print ("Wie heißt das Objekt welches sie hinzufügen wollen?")
z=str(input())
print ("Nennen sie bitte die Katalog-Nummer im NGC")
w = input ()
print ("Nennen sie bitte das Sternbild")
e = str(input())
print ("Nennen sie bitte die magnitude")
r = input()
print ("Nennen sie bitte zu welcher Jahreszeit es gehört")
t = str(input())
path = "C:/user/chris/Desktop/Objekte/"
filename = (z)
file = open (z+c, 'a')
k = input()
print (k)
file.write (z+"\n"+w+"\n"+"Sternbild:"+e+"\n"+"Magnitude:"+r+"\n"+"Jahreszeit"+t)
file.close()
Nicht wunder, wenn maches Unsinniges drinsteht, ich habe viel rumprobiert...
m='hinzufügen'
c='.txt'
print ("Das ist meine Datenbank verschiedener Deepsky Objekte")
print ("Möchtest du eine Information hinzufügen oder abrufen?")
x=str(input())
if x==l:
print ("Welches Objekt möchtest du abrufen? Bitte Namen oder Katalog-Nummer nennen")
o=str(input())
path = 'C:/Users/chris/Desktop/Objekte/'
filename = o
file = open ('C:/Users/chris/Desktop/Objekte/'+o+'/', 'r')
print (file.read)
b = input()
print (b)
if x==m:
print ("Wie heißt das Objekt welches sie hinzufügen wollen?")
z=str(input())
print ("Nennen sie bitte die Katalog-Nummer im NGC")
w = input ()
print ("Nennen sie bitte das Sternbild")
e = str(input())
print ("Nennen sie bitte die magnitude")
r = input()
print ("Nennen sie bitte zu welcher Jahreszeit es gehört")
t = str(input())
path = "C:/user/chris/Desktop/Objekte/"
filename = (z)
file = open (z+c, 'a')
k = input()
print (k)
file.write (z+"\n"+w+"\n"+"Sternbild:"+e+"\n"+"Magnitude:"+r+"\n"+"Jahreszeit"+t)
file.close()
Nicht wunder, wenn maches Unsinniges drinsteht, ich habe viel rumprobiert...
Man muß keine Zeichen sparen. Variablennamen dürfen gerne mehr als ein Zeichen haben, vor allem sollten sie sprechend sein. Wie kommst Du drauf dass e Sternbild heißt, oder r die Magnitude?
`input` liefert schon einen String, str darauf aufzurufen ist also unsinnig.
Strings setzt man nicht mit + zusammen, sondern nutzt Formatstrings. Pfade setzt man erst recht nicht mit + zusammen, sondern nutzt was aus pathlib.
Erst versuchst Du etwas aus einem Verzeichnis zu lesen, was nicht klappen dürfte, dann schreibst Du was irgendwo hin ohne pfad zu verwenden. Zeilen werden mit einem Zeileendezeichen abgeschlossen.
Neben den ganzen Unzulänglichkeiten, wo hast Du nun ein Problem?
`input` liefert schon einen String, str darauf aufzurufen ist also unsinnig.
Strings setzt man nicht mit + zusammen, sondern nutzt Formatstrings. Pfade setzt man erst recht nicht mit + zusammen, sondern nutzt was aus pathlib.
Erst versuchst Du etwas aus einem Verzeichnis zu lesen, was nicht klappen dürfte, dann schreibst Du was irgendwo hin ohne pfad zu verwenden. Zeilen werden mit einem Zeileendezeichen abgeschlossen.
Neben den ganzen Unzulänglichkeiten, wo hast Du nun ein Problem?
Code: Alles auswählen
from pathlib import Path
pfad = Path('C:/Users/chris/Desktop/Objekte')
print("Das ist meine Datenbank verschiedener Deepsky Objekte")
print("Möchtest du eine Information hinzufügen oder abrufen?")
auswahl = input()
if auswahl == "abrufen":
print("Welches Objekt möchtest du abrufen? Bitte Namen oder Katalog-Nummer nennen")
objekt = input()
filename = pfad / objekt
print(filename.read_text())
elif auswahl == "hinzufügen":
print("Wie heißt das Objekt welches sie hinzufügen wollen?")
objekt = input()
print("Nennen sie bitte die Katalog-Nummer im NGC")
katalog_nummer = input()
print("Nennen sie bitte das Sternbild")
sternbild = input()
print("Nennen sie bitte die magnitude")
magnitude = input()
print ("Nennen sie bitte zu welcher Jahreszeit es gehört")
jahreszeit = input()
filename = pfad / objekt
filename.write_text(
f"{objekt}\n"
f"{katalog_nummer}\n"
f"Sternbild:{sternbild}\n"
f"Jahreszeit:{jahreszeit}\n"
)
-
- User
- Beiträge: 31
- Registriert: Samstag 16. Mai 2020, 18:52
Mal ein paar Verbesserungsvorschläge:
+ Zum Speichern der Daten ist vielleicht, eine CSV Datei besser geeignet, als viele kleine Textdateien.
+ Die Benutzerabfrage am Anfang (Objekt, Katalog Nummer, Sternenbild usw.) könnte man mit dem modul inquirer übersichtlicher gestalten.
+ Dateien mit "with open" lesen("r"), schreiben("w") und hinzufügen("a")
+ Beschäftige dich mehr mit den Grundlagen.
+ Zum Speichern der Daten ist vielleicht, eine CSV Datei besser geeignet, als viele kleine Textdateien.
+ Die Benutzerabfrage am Anfang (Objekt, Katalog Nummer, Sternenbild usw.) könnte man mit dem modul inquirer übersichtlicher gestalten.
+ Dateien mit "with open" lesen("r"), schreiben("w") und hinzufügen("a")
+ Beschäftige dich mehr mit den Grundlagen.
Code: Alles auswählen
import inquirer
from os.path import exists as file_exists
import csv
def main():
SAVE_FILE = "sternenhimmel.csv"
input_var = input("Daten (h)inzufügen oder (a)brufen? >> ")
if input_var == "a":
if not file_exists(SAVE_FILE):
print("Fehler: Keine Datei gefunden.")
return
else:
input_search = input("Wonach soll gesucht werden?"
" >> ").lower()
with open(SAVE_FILE) as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
if input_search in row["objektname"].lower() or \
input_search in row["katalog_nr"].lower():
for name in row:
print(f"{name.title()}: {row[name]}")
break
else:
print("Keinen passenden Eintrag gefunden.")
elif input_var == "h":
with open(SAVE_FILE) as csvfile:
reader = csv.DictReader(csvfile)
objekte = {row["objektname"] for row in reader}
answers = inquirer.prompt([inquirer.Text('objektname',
message="Objektname:")])
if answers["objektname"] in objekte:
print("Fehler: Objekt ist bereits in der Datei.")
return
questions = [inquirer.Text('katalog_nr', message="Katalog Nummer:"),
inquirer.Text('sternenbild', message="Sternenbild:"),
inquirer.Text('magnidute', message="Magnidute:")]
answers.update(inquirer.prompt(questions))
questions = [inquirer.List('jahreszeit', message="Jahreszeit?",
choices=['Winter', 'Frühling',
'Sommer', 'Herbst'], ), ]
answers.update(inquirer.prompt(questions))
if file_exists(SAVE_FILE):
file_mode = "a"
elif not file_exists(SAVE_FILE):
file_mode = "w"
with open(SAVE_FILE, mode=file_mode) as csvfile:
fieldnames = ['objektname', 'katalog_nr', 'sternenbild',
'magnidute', 'jahreszeit']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
if file_mode == "w":
writer.writeheader()
writer.writerow(answers)
else:
print("Falsche Eingabe.")
if __name__ == '__main__':
main()
inquirer ist ein externes Modul, das Du extra installieren mußt.
@ElektroBerry: Konstanten werden am Anfang der Datei gesammelt. Was soll das `var` bei input_var bedeuten? Was wird bei `input_search` gesucht? Dass der Wert dieser Variablen irgendwann einmal eingegeben wurden, ist für die Bedeutung im Code irrelevant.
Wenn die elif-Bedingung das exakte Gegenteil der if-Bedingung ist, sollte man else benutzen.
@ElektroBerry: Konstanten werden am Anfang der Datei gesammelt. Was soll das `var` bei input_var bedeuten? Was wird bei `input_search` gesucht? Dass der Wert dieser Variablen irgendwann einmal eingegeben wurden, ist für die Bedeutung im Code irrelevant.
Wenn die elif-Bedingung das exakte Gegenteil der if-Bedingung ist, sollte man else benutzen.
Bei mir funktionieren beide nicht wirklich...
Bei @Elektroberry verstehe ich nicht ganz, wie das funktioniert, da wenn ich a eingebe, steht da dass keine Datei gefunden wurde.
Bei @Sirius3 steht da in etwa das selbe, wenn ich eine Datei hinzufügen möchte.
Mfg
Christian
Bei @Elektroberry verstehe ich nicht ganz, wie das funktioniert, da wenn ich a eingebe, steht da dass keine Datei gefunden wurde.
Bei @Sirius3 steht da in etwa das selbe, wenn ich eine Datei hinzufügen möchte.
Mfg
Christian
@Elektrobarry:
Wenn ich dein Programm starte, wird mir in VSC gleich ein Problem angezeigt: unresolved import 'inquirer'
Dabei habe ich über "pip install inquirer" installiert. Wenn ich dein Programm dann laufen lasse, kommt die erste Nachricht, aber wenn ich "a" eingebe kommt im output immer: Fehler: Keine Datei gefunden.
Wenn ich "h" eingebe, kommt dort:
Traceback (most recent call last):
File "c:/Users/chris/Desktop/Deepsky Datenbank/Datenbank.py", line 59, in <module>
main()
File "c:/Users/chris/Desktop/Deepsky Datenbank/Datenbank.py", line 27, in main
with open(SAVE_FILE) as csvfile:
FileNotFoundError: [Errno 2] No such file or directory: 'sternenhimmel.csv'
@Sirius3:
Wenn ich dein Programm starte, und "hinzufügen" eingebe, funktioniert das alles so weit, bis ans Ende, wo dann diese Fehlermeldung auftaucht:
Traceback (most recent call last):
File "c:/Users/chris/Desktop/Deepsky Datenbank/Daten.py", line 26, in <module>
filename.write_text(
File "C:\Users\chris\AppData\Local\Programs\Python\Python38\lib\pathlib.py", line 1251, in write_text
with self.open(mode='w', encoding=encoding, errors=errors) as f:
File "C:\Users\chris\AppData\Local\Programs\Python\Python38\lib\pathlib.py", line 1218, in open
return io.open(self, mode, buffering, encoding, errors, newline,
File "C:\Users\chris\AppData\Local\Programs\Python\Python38\lib\pathlib.py", line 1074, in _opener
return self._accessor.open(self, flags, mode)
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\chris\\Desktop\\Objekte\\Iris Nebel'
Wenn ich "abrufen" eingebe, kommt im wesentlichen die gleiche Fehlermeldung. Ich habe sogar extra eine Datei mit dem Namen erstellt...
Danke, dass ihr euch die Mühe macht und mir helft!
Mfg
Christian
Wenn ich dein Programm starte, wird mir in VSC gleich ein Problem angezeigt: unresolved import 'inquirer'
Dabei habe ich über "pip install inquirer" installiert. Wenn ich dein Programm dann laufen lasse, kommt die erste Nachricht, aber wenn ich "a" eingebe kommt im output immer: Fehler: Keine Datei gefunden.
Wenn ich "h" eingebe, kommt dort:
Traceback (most recent call last):
File "c:/Users/chris/Desktop/Deepsky Datenbank/Datenbank.py", line 59, in <module>
main()
File "c:/Users/chris/Desktop/Deepsky Datenbank/Datenbank.py", line 27, in main
with open(SAVE_FILE) as csvfile:
FileNotFoundError: [Errno 2] No such file or directory: 'sternenhimmel.csv'
@Sirius3:
Wenn ich dein Programm starte, und "hinzufügen" eingebe, funktioniert das alles so weit, bis ans Ende, wo dann diese Fehlermeldung auftaucht:
Traceback (most recent call last):
File "c:/Users/chris/Desktop/Deepsky Datenbank/Daten.py", line 26, in <module>
filename.write_text(
File "C:\Users\chris\AppData\Local\Programs\Python\Python38\lib\pathlib.py", line 1251, in write_text
with self.open(mode='w', encoding=encoding, errors=errors) as f:
File "C:\Users\chris\AppData\Local\Programs\Python\Python38\lib\pathlib.py", line 1218, in open
return io.open(self, mode, buffering, encoding, errors, newline,
File "C:\Users\chris\AppData\Local\Programs\Python\Python38\lib\pathlib.py", line 1074, in _opener
return self._accessor.open(self, flags, mode)
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\chris\\Desktop\\Objekte\\Iris Nebel'
Wenn ich "abrufen" eingebe, kommt im wesentlichen die gleiche Fehlermeldung. Ich habe sogar extra eine Datei mit dem Namen erstellt...
Danke, dass ihr euch die Mühe macht und mir helft!
Mfg
Christian
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@rennmaus: Bei dem Code von Elektroberry wird es die Datei dann wohl nicht geben. Das ist dann ja auch das richtige verhalten bei "a" wie abrufen. Was hättest Du denn ohne das da Daten existieren würden sonst erwartet was passieren sollte wenn man versucht was abzurufen was nicht da ist?
Bei "h" ist das dann tatsächlich ein Programmierfehler. Der aber irgendwo auch ziemlich offensichtlich ist und deshalb das Programmverhalten an der Stelle nicht wirklich überraschen sollte.
Beim Code von Sirius3 kann das eigentlich nur passieren wenn es das Verzeichnis "C:/Users/chris/Desktop/Objekte" nicht gibt. Öffnen von Dateien, auch zum schreiben, erstellt nicht auf magische Weise alle Verzeichnisse bis zu der Datei. Also entweder musst Du das Verzeichnis anlegen, oder ein anderes, existierendes im Code angeben.
Bei "h" ist das dann tatsächlich ein Programmierfehler. Der aber irgendwo auch ziemlich offensichtlich ist und deshalb das Programmverhalten an der Stelle nicht wirklich überraschen sollte.
Beim Code von Sirius3 kann das eigentlich nur passieren wenn es das Verzeichnis "C:/Users/chris/Desktop/Objekte" nicht gibt. Öffnen von Dateien, auch zum schreiben, erstellt nicht auf magische Weise alle Verzeichnisse bis zu der Datei. Also entweder musst Du das Verzeichnis anlegen, oder ein anderes, existierendes im Code angeben.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@rennmaus: Wenn der Fehler mit dem Code von Sirus3 beim schreiben einer Datei kommt, dann kann es das Verzeichnis nicht geben, denn sonst würde ja der Fehler nicht kommen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
-
- User
- Beiträge: 31
- Registriert: Samstag 16. Mai 2020, 18:52
Ich habe die Hinweise beachtet und es war wirklich ein Fehler in dem Skript.
Es wurde versucht die Datei zu lesen, um zu überprüfen ob das Himmelsobjekt schon drin ist, bevor sie erstellt wurde.
Hoffentlich habe ich jetzt nichts übersehen.
Es wurde versucht die Datei zu lesen, um zu überprüfen ob das Himmelsobjekt schon drin ist, bevor sie erstellt wurde.
Hoffentlich habe ich jetzt nichts übersehen.
Code: Alles auswählen
import inquirer
from os.path import exists as file_exists
import csv
SAVE_FILE = "sternenhimmel.csv"
def main():
antwort = input("Daten (h)inzufügen oder (a)brufen? >> ")
if antwort == "a":
if not file_exists(SAVE_FILE):
print("Fehler: Keine Datei gefunden.")
return
else:
name_search = input("Wonach soll gesucht werden?"
" >> ").lower()
with open(SAVE_FILE) as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
if name_search in row["objektname"].lower() or \
name_search in row["katalog_nr"].lower():
for name in row:
print(f"{name.title()}: {row[name]}")
break
else:
print("Keinen passenden Eintrag gefunden.")
elif antwort == "h":
if file_exists(SAVE_FILE):
file_mode = "a"
with open(SAVE_FILE) as csvfile:
reader = csv.DictReader(csvfile)
objekte = {row["objektname"] for row in reader}
else:
file_mode = "w"
answers = inquirer.prompt([inquirer.Text('objektname',
message="Objektname:")])
if file_mode == "a":
if answers["objektname"] in objekte:
print("Fehler: Objekt ist bereits in der Datei.")
return
questions = [inquirer.Text('katalog_nr', message="Katalog Nummer:"),
inquirer.Text('sternenbild', message="Sternenbild:"),
inquirer.Text('magnidute', message="Magnidute:")]
answers.update(inquirer.prompt(questions))
questions = [inquirer.List('jahreszeit', message="Jahreszeit?",
choices=['Winter', 'Frühling',
'Sommer', 'Herbst'], ), ]
answers.update(inquirer.prompt(questions))
with open(SAVE_FILE, mode=file_mode) as csvfile:
fieldnames = ['objektname', 'katalog_nr', 'sternenbild',
'magnidute', 'jahreszeit']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
if file_mode == "w":
writer.writeheader()
writer.writerow(answers)
else:
print("Falsche Eingabe.")
if __name__ == '__main__':
main()