Datei umbennen

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
recnice
User
Beiträge: 45
Registriert: Sonntag 20. März 2011, 12:10

Hallo,
habe folgendes Problem:

ich möchte Dateinamen für Dateien mit bestimmten Änderungen ändern :

Code: Alles auswählen

# -*- coding: utf-8 -*-
#! /usr/bin/env python

import os,sys,glob 
new_matsum = "matsum"                                        # so soll die Datei heißen

old_matsum = glob.glob("*matsum")                        # finde Dateien mit dieser Endung
old_matsum = str(old_matsum)
os.rename(old_matsum,new_matsum)                    # Umbenennen

Als Fehlermeldung bekomme ich:

os.rename(old_matsum,new_matsum)
OSError: [Errno 2] No such file or directory

Woran liegt's?
Ich hatte auch schon versucht den Pfad der Datei explizit anzugeben, aber old_matsum scheint trotz str(old_matsum)
eine liste zu sein: /python/uebung/rename/folder/folder1/['h_12_d15.matsum']

Weiß jemand wo der Fehler liegt??
BlackJack

@recnice: Nach ``str(old_matsum)`` hast Du keine Liste mehr sondern eine Zeichenkette. Das hättest Du auch leicht mit der `type()`-Funktion heraus finden können. Allerdings hast Du dann natürlich eine Zeichenkette, welche die *Liste* darstellt. Wieso hast Du da etwas anderes erwartet?

Du willst nicht die Liste in eine Zeichenkette umwandeln, sondern die Zeichenkette in der Liste an Index 0 haben. Bitte nochmal das Tutorial aus der Dokumentation durcharbeiten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du musst eben das erste Listenelement auswählen:

Code: Alles auswählen

In [20]: foo = ["Hallo", "Welt"]

In [21]: str(foo)
Out[21]: "['Hallo', 'Welt']"

In [22]: foo[0]
Out[22]: 'Hallo'
In der Liste stehen doch bereits Strings.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
recnice
User
Beiträge: 45
Registriert: Sonntag 20. März 2011, 12:10

@ Hyperion:

das funktioniert eben nicht:

Code: Alles auswählen

old_matsum = glob.glob("*matsum")
old_matsum = str(old_matsum)
print old_matsum
print old_matsum[0]
old_matsum = old_matsum[1:-1]
print old_matsum
path_oldmatsum = os.getcwd()+"/"+str(old_matsum)
print path_oldmatsum
Und raus kommt:
['h_12_d15.matsum']
[
'h_12_d15.matsum'
/python/uebung/rename/folder/folder1/'h_12_d15.matsum'
Trotzallem mit ' ...'
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

OMG... Du musst eben mal genau lesen! Wenn Du erst mit `str` die Liste in einen String wandelst, sollte es klar sein, das der Index 0 davon der erste Buchstabe des Strings ist... :roll: Wohingegen der Index 0 der von `glob` zurückgegebenen Liste ein Eintrag ist, den Du haben willst.

Achtung: Es können je nach Eingrenzung natürlich mehrere Elemente in der Liste stehen - da musst Du selber aufpassen, ob das auch wirklich die Datei ist, die Du umbenennen willst.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Liest du eigentlich was man dir schreibt? Wenn du den Bezeichner für die Liste an die Stringrepräsentation der Liste bindest, dann kann bei deinem Vorhaben nur dummes Zeug dabei herauskommen. Falls du die Antworten gelesen hast, dann hast du sie offensichtlich nicht verstanden. Schau dir wirklich ernsthaft das Tutorial an. Es lohnt sich.

Was glaubst du denn eigentlich, was du mit diser Codepassage erreichst (davon ausgehend, dass old_matsum vorher eine Liste ist)?

Code: Alles auswählen

old_matsum = str(old_matsum)
Antworten