So startswith() wars - jetzt geht's
Hatte ja auch schon MagBen vorgeschlagen
Gracias ...
Probleme mit shutil.move ?
HAbe es leider noch nicht verstanden wie du das meinst:Hyperion hat geschrieben:Dann schreib das doch bitte das nächste MalJoB hat geschrieben:Lieber moderator,
hol die Pfade zum move aus 2 txt, deswegen ist doch nicht alles falsch?
Zumindest funktioniert es für meine Ansprüche
Dateien sollte man immer mittels ``with open(...) as file_handler`` öffnen (spart das explizite Schließen und tut das auch sauber im Exceptionfall!).
Ich würde mir auch eine Funktion schreiben, die die korrespondierenden Dateinamen als Tupel liefert und dann das ``shutil.move`` separat aufrufen, also in etwa so:Code: Alles auswählen
def get_filenames_from(filename): with open(filename) as f: for path in f: yield f def main(): sources = get_filenames_from("...") destinations = get_filenames_from("...") for source, destination in zip(sources, destinations): shutil.move(source, destination)
Code: Alles auswählen
import shutil, os, sys, re, fnmatch
from glob import glob
# import numpy as np
##QFile = "R:\\natura 2000\\SG-Besprechungen\\Migration2015_Q_Test.txt"
##ZFile = "R:\\natura 2000\\SG-Besprechungen\\Migration2015_Z_Test.txt"
QFile = r"R:\natura 2000\SG-Besprechungen\Migration2015_Q.txt"
ZFile = r"R:\natura 2000\SG-Besprechungen\Migration2015_Z.txt"
##QFile = "R:\\natura 2000\\SG-Besprechungen\\Migration2015_Q_MaPOrdner.txt"
##ZFile = "R:\\natura 2000\\SG-Besprechungen\\Migration2015_Z_MaPOrdner.txt"
def get_filenames_from(QFile):
with open(QFile) as f:
for path in f:
yield f
def main():
sources = get_filenames_from(QFile)
destinations = get_filenames_from(ZFile)
for source, destination in zip(sources, destinations):
# shutil.move(source, destination)
print (source, destination)
main()
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ich würde den Code auch mal laufen lassen, dann verstehst Du es vielleicht (Oder mal in einer *Shell* mit zwei Listen und ``zip`` experimentieren )
Wieso Du den Parameter in Zeile 15 in ``QFile`` geändert hast, kann ich auch nicht nachvollziehen! ``filename`` ist da doch viel generischer und passender! (Betrifft ja sowohl Quell- als auch Zieldatei)
Bitte unterlasse doch Full-Quotes. Die blähen die Threads auf und helfen nicht beim Verständnis. Und auskommentierte Zeilen lasse doch bitte ebenfalls weg, es sei denn diese dienen dem Verständnis.
Wieso Du den Parameter in Zeile 15 in ``QFile`` geändert hast, kann ich auch nicht nachvollziehen! ``filename`` ist da doch viel generischer und passender! (Betrifft ja sowohl Quell- als auch Zieldatei)
Bitte unterlasse doch Full-Quotes. Die blähen die Threads auf und helfen nicht beim Verständnis. Und auskommentierte Zeilen lasse doch bitte ebenfalls weg, es sei denn diese dienen dem Verständnis.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ooops... es muss natürlich ``yield path.strip()`` lauten! (Das ``strip`` hatte Sirius3 angemerkt).
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Sowohl
yield path.strip()
also auch
yield f.strip()
Führen dazu:
AttributeError: 'file' object has no attribute 'strip'
Führt dazu:
TypeError: 'file' object is not callable
yield path.strip()
also auch
yield f.strip()
Führen dazu:
AttributeError: 'file' object has no attribute 'strip'
Code: Alles auswählen
for path in f:
for line in f(path.strip(), "r"):
yield f
TypeError: 'file' object is not callable
@JoB: wo Du auch immer jetzt was, wie ersetzt hast, es gibt nur eine Zeile mit "yield f" und das wird zu:
Code: Alles auswählen
def get_filenames_from(QFile):
with open(QFile) as f:
for path in f:
yield path.strip()
Du solltest schon versuchen zu verstehen was der Code macht. Wenn man einfach nur Code rät und sich nicht wirklich dafür interessiert, dann kommt bei einer Korrektur so ein Murks heraus wie du ihn fabriziert hast.JoB hat geschrieben:Code: Alles auswählen
for path in f: for line in f(path.strip(), "r"): yield f
f ist ein FileObject. Das kann man natürlich nicht mit den Parametern (path.strip(), "r") aufrufen. Was sollte diese Syntax denn auch bedeuten? Und wie kommst du auf die Idee innerhalb einer Schleife die über die Zeilen des Dateiobjekts iteriert noch einmal eine Schleife über das gleiche Dateiobjekt konstruieren zu wollen?
Fehlerhaft im Beispielcode war, wie auch schon explizit geschrieben wurde, das yield f. Dadurch würde ja für jede durchlaufene Zeile der Datei das Dateiobjekt selber zurückgegeben. Gewünscht ist aber path. Um den jetzt noch vorne und hinten von Leerzeichen und Zeilenumbrüchen zu befreien wendet man darauf die strip-Methode an.
Code: Alles auswählen
for path in f:
yield path.strip()
Falls du ein Problem mit yield hast, dann schau dir mal das folgende Beispiel an.
Code: Alles auswählen
def get_values():
yield 2
yield 3
yield 5
yield 8
for result in get_values():
print(result)
Jetzt erzeugen wir das mehrfache yield durch eine Schleife.
Code: Alles auswählen
def get_squares(iterable):
for value in iterable:
yield value ** 2
numbers = range(10)
for result in get_squares(numbers):
print(result)