Seite 1 von 1

Datei umbennen

Verfasst: Samstag 14. Mai 2011, 19:20
von recnice
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??

Re: Datei umbennen

Verfasst: Samstag 14. Mai 2011, 19:32
von 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.

Re: Datei umbennen

Verfasst: Samstag 14. Mai 2011, 19:33
von Hyperion
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.

Re: Datei umbennen

Verfasst: Samstag 14. Mai 2011, 19:51
von recnice
@ 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 ' ...'

Re: Datei umbennen

Verfasst: Samstag 14. Mai 2011, 19:58
von Hyperion
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.

Re: Datei umbennen

Verfasst: Samstag 14. Mai 2011, 20:01
von /me
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)