Seite 1 von 1
Dateien in eine Funktion übergeben
Verfasst: Donnerstag 24. Februar 2022, 13:25
von StyleFile
Hallo zusammen,
ich würde gerne beim Aufruf einer Funktion die Dateien names.txt und numbers.txt übergeben. Nun habe ich das Problem, dass ich keine Text Dateien in die Funktion übergeben kann und immer folgender Fehler kommt:
paste (names.txt, numbers.txt)
NameError: name 'names' is not defined
Mein Code:
def paste(file1, file2):
a=open("file1")
b=open("file2")
f=a.read()
g=b.read()
c=f.splitlines()
d=g.splitlines()
print(f"{c[0]:<15}{d[0]}")
print(f"{c[1]:<15}{d[1]}")
print(f"{c[2]:<15}{d[2]}")
print(f"{c[3]:<15}{d[3]}")
file1.close()
file2.close()
paste (names.txt, numbers.txt)
Re: Dateien in eine Funktion übergeben
Verfasst: Donnerstag 24. Februar 2022, 14:39
von __deets__
Du musst dir ueber die korrekte Verwendung der Anfuehrungszeichen fuer String-Literale klar werden.
foo
ist ein Name.
"foo"
ist ein String. Deine Funktion bekommt zwei Namen, die du dann falsch mit "file1" als Strings versuchst zu benutzen. Der Aufruf hingegen muss mit "names.txt" geschehen, weil das ja nunmal die Dateinamen sind.
Re: Dateien in eine Funktion übergeben
Verfasst: Donnerstag 24. Februar 2022, 14:55
von Sirius3
Es gibt Variablennamen und es gibt literale Strings, die in Anführungszeichen gesetzt werden. "file1" ist ein String, names.txt ist eine Variable names dessen Attribut txt abgefragt wird.
Einbuchstabige Variablennamen sind fast immer ungeeignt, weil sie nichtssagend sind, bei Dir sind das sogar 6 Buchstaben, die völlig willkürlich gewählt worden sind. Dateien öffnet man mit dem with-Statement, statt Zeilen zu kopieren benutzt man Schleifen.
Code: Alles auswählen
def paste(filename1, filename2):
with open(filename1) as file1, open(filename2) as file2:
for line1, line2 in zip(file1, file2):
print(f"{line1.rstrip():<15}{line2.rstrip()}")
paste("names.txt", "numbers.txt")
Re: Dateien in eine Funktion übergeben
Verfasst: Freitag 25. Februar 2022, 10:43
von StyleFile
Vielen Dank für die Hilfe! Ihr habt mir da sehr geholfen. Mit paste("names.txt", "numbers.txt") funktioniert es nun ohne Probleme, jedoch soll ich es mit dem Aufruf: paste names.txt numbers.txt ausführen können. Kann man das irgendwie implementieren? Schon einmal vielen Dank!!
Re: Dateien in eine Funktion übergeben
Verfasst: Freitag 25. Februar 2022, 10:57
von __deets__
Deine Beschreibung, was du tun willst, ist unklar. Meinst du die Kommandozeile damit? Dann geht das zb mit sys.argv.
Re: Dateien in eine Funktion übergeben
Verfasst: Freitag 25. Februar 2022, 11:03
von StyleFile
Hallo, nach Ausführung des Programms soll im Idle mit dem Aufruf: paste names.txt numbers.txt die Funktion ausgeführt werden. Aktuell kann ich sie nur mit der Syntax paste("names.txt", "numbers.txt") ausführen
Re: Dateien in eine Funktion übergeben
Verfasst: Freitag 25. Februar 2022, 11:12
von __deets__
Das geht in IDLE nicht. Das “spricht” nur Python.
Re: Dateien in eine Funktion übergeben
Verfasst: Freitag 25. Februar 2022, 12:08
von __blackjack__
Ich denke das ist die beliebte (?) Hausaufgabenserie: Programmieren sie die Unix/Linux Textwerkzeuge in Python nach. Das hatten wir vor einiger Zeit hier schon mal im Forum. Hier wäre die Dokumentation zum ``paste``-Aufruf:
https://www.gnu.org/software/coreutils/ ... ation.html
Selbst bei Beschränkung genau zwei Dateien und keine der Optionen, bleibt noch die Frage wie das Programm damit umgehen soll, falls die Dateien unterschiedliche Zeilenanzahl haben. Die Lösung von Sirius3 macht da etwas anderes als als das ``paste``-Programm.
Re: Dateien in eine Funktion übergeben
Verfasst: Montag 28. Februar 2022, 14:06
von StyleFile
Ja genau ich soll über ein Hauptprogramm(main) die beiden Dateien über den Befehl python paste names.txt numbers.txt ausführen. Anschließend noch mit Parametern wie z.B. paste -d die Ausgabe ändern. Naja ich schaue da mal bei der Dokumentation nach, vielleicht finde ich da was. Aber schonmal vielen Dank für die Hilfe!