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)
Dateien in eine Funktion übergeben
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.
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.
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.
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")
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!!
- __blackjack__
- User
- Beiträge: 14078
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
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.
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.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
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!