subrocess.Popen öffnet falschen Ordner / Befehl für Ordnersuche?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
fabian0
User
Beiträge: 7
Registriert: Dienstag 18. September 2018, 18:52
Wohnort: 127.0.0.1

Hallo Community,

ich bin neu hier und hoffe auf die Hilfe des Forums.

Ich habe bisher noch sehr sehr wenig Erfahrung mit python und lese mich gerade durch Bücher und schaue Tutorials auf Youtube um meine Ideen umzusetzen. Da ich leider niemanden im meinem Umfeld habe der sich für python begeistern kann, habe ich mich hier angemeldet.

Mein Wunsch ist folgender:

Ich möchte für meinen Berufsalltag ein Programm schreiben das Projektordner sucht und auch öffnet da unsere Ordnerstruktur doch recht kompliziert ist, es aber gut abbildbar ist.

Leider scheitere ich schon daran einen Ordner einfach so öffnen zu lassen.

Mein Code sieht bisher wie folgt aus:
Wenn ich den nachfolgenden Code ohne das "+x" ausführe öffnet mir python ein Explorer mit dem Pfad "C:\". So weit so gut.

Da das in "" ja ein String ist, wollte ich einfach eine Variable definieren und die anhängen, was aber leider nicht klappt. Es wird immer der Ordner Dokumente geöffnet, egal was ich da eingebe.

Code: Alles auswählen

 import subprocess
x = "python"
subprocess.Popen('explorer "C:\"+x') 

Wie mache ich das hier richtig? Google, Youtube und die Forensuche haben mir leider nicht geholfen.

Ziel ist es später das eine im Vorfeld definierte Variable an C:\ als Pfad angehangen, vll auch eine Konstante und eine Variable.

Wenn ich schon dabei bin zu Fragen,

Gibt es eine Funktion oder Befehl das ähnlich wie in der Suche ein Ordner unter einem bestimmten Pfad gesucht wird und eine Auswahl zurückgegeben wird?
Der vom User eingegebene Wert ist hierbei nur ein Teil des wirklichen Ordnernamens .

Vielen Dank und beste Grüße.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Das "C:" ist kein String, sondern einfach nur Zeichen innerhalb eines Strings. \ ist übrigens ein Sonderzeichen, das bei \" sagt, dass " nicht das Ende eines Stringliterals ist, sondern das Zeichen ", daher nur "C:" statt "C:\". Um einen String in Anführungszeichen zu haben, müßte das so aussehen:

Code: Alles auswählen

'explorer "C:\\' + x + '"'
Da das sehr unleserlich wird, benutz man format:

Code: Alles auswählen

'explorer "C:\\{}"'.format(x)
was es aber wieder schwierig macht, falls doch mal Sonderzeichen im Verzeichnisnamen x vorkommen. Daher kennt Popen Listen, wo die einzelnen Argumente richtig an das Aufgerufene Programm übergeben werden:

Code: Alles auswählen

subprocess.Popen(['explorer', os.path.join('C:\\', x)])
und es gibt os.path.join, um Pfade richtig zusammenzusetzen.

Dateien suchen geht mit Pathlib:

Code: Alles auswählen

import pathlib
p = pathlib.Path('C:/python')
for filename in p.glob('**/*teilname*')):
    print(filename)
Antworten