Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

1

17.01.2015, 16:48

Python | Pfad speichern?

Hi,
ein Problem das einen Kollegen betrifft:

Er hat ein Pythonscript geschrieben, dass eine Ordnerstruktur analysiert und alle Dateien (bzw. deren Pfade) in einer Python list() abspeichert.
Die Pfade sind vollständig und korrekt, jedoch wird auf sonderbare Weise nur der Dateiname in der Liste gespeichert, der Pfade wird einfach abgeschnitten ?(

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
    for root, dir, file_list in os.walk(os.getcwd()):
        
        for files in file_list:
            if files.endswith(".cpp"):
                path = root + '\\' + files
                path = str(path)
                print(path) #1
                cpp_files.append(path)
                
    print(files) #2


#1 ergibt: C:\Users\Christian\Desktop\main.cpp
#2 ergibt: main.cpp

P.S.: Python 3.4.2 wird verwendet.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

2

17.01.2015, 17:07

Ich kenne mich mit Python zwar nicht aus, aber eventuell sollte dein Kollege nochmal die docs lesen

Zitat

For each directory in the tree rooted at directory top (including top itself), it yields a 3-tuple (dirpath, dirnames, filenames).

dirpath is a string, the path to the directory. dirnames is a list of the names of the subdirectories in dirpath (excluding '.' and '..'). filenames is a list of the names of the non-directory files in dirpath. Note that the names in the lists contain no path components. To get a full path (which begins with top) to a file or directory in dirpath, do os.path.join(dirpath, name).


Beim ersten print tut er das auch (root + '\\' + files), beim zweiten nicht.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

3

17.01.2015, 17:40

Löst trotzdem das Problem nicht. Es wird ein String in der Liste gespeichert und der String wird einfach so zerpflückt.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

4

17.01.2015, 18:16

Du printest auch files und nicht cpp_files. In letzterer Liste hat er den string gespeichert, den er in #1 untersucht.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

5

17.01.2015, 18:21

LoL... Das es gleich zwei Programmierern nicht auffällt.

Danke, das hat es gelöst.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

6

17.01.2015, 18:24

Sowas ist oft der Hauptgrund für stundenlanges Suchen. :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

7

17.01.2015, 19:20

Und noch ein Hinweis:

Quellcode

1
2
path = root + '\\' + files
path = str(path)

Das Ergebnis einer Konkatenierung von Strings ergibt immer einen String, die 2. Zeile ist daher völlig unnötig.
Und die Variable sollte nicht "files" sondern "file" heißen, da es keine Ansammlung von Dateien (bzw. Dateinamen), sondern eine einzelne Datei (bzw. Dateiname) ist.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 717

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

8

17.01.2015, 19:45

Also es verhält sich dann ähnlich wie in Java, interessant.

Danke Sacaldur,
man lernt nie aus!
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

9

17.01.2015, 21:09

Das ist in jeder Sprache so, nicht nur in Java und Python. Die Besonderheit bei Python ist aber, dass man nur Strings mit Strings verknüpfen kann.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

10

18.01.2015, 13:16

Wenn wir schon am überkorrigieren sind, will ich noch eins draufsetzen: os.path.join wäre der eigentlich korrekte Ansatz, denn diese Funktion stellt sicher, dass der Pfad auch Systemunabhängig gültig ist (was direkt auch in Nimelrians Antwort explizit erwähnt ist).

P.S: ist eig auch ein typischer Anwendungsfall für list comprehension. Also etwas in der Form:

Quellcode

1
2
    for root, dir, file_list in os.walk(os.getcwd()):
        cpp_files += [os.path.join(root,files) for files in file_list if files.endswith(".cpp")]
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Nox« (18.01.2015, 13:22)


Werbeanzeige