Datein absuchen bzw öffnen

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
PenPen

Freitag 22. August 2003, 10:38

Hi ich habe nochmal ne Frage

Ich möchte in meinem Programm mehrere Dateiene öffen die erste heitßt zb. parameter1.csv die darauffolgenden würden dann heißen:
parameter1.1.csv
parameter1.2.csv
...
wie schaffe ich es das das Programm automatisch nach eingabe von 1 nach den anderen Datein sucht und diese ebenfalls bearbeitet und unter einem neuem Namen ebenfalls nach dem Muster 1.1, 1.2, ... wieder abspeichert?

Servus Mark
PenPen

Freitag 22. August 2003, 10:40

Sorry aber jedesmal mache ich irgendwie was falsch obs jetzt Rechschreibung oder Titel und Benutzername vertauschen ist.
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Freitag 22. August 2003, 10:49

PenPen hat geschrieben:wie schaffe ich es das das Programm automatisch nach eingabe von 1 nach den anderen Datein sucht und diese ebenfalls bearbeitet und unter einem neuem Namen ebenfalls nach dem Muster 1.1, 1.2, ... wieder abspeichert?
Ganz klar ist mir die Abfolge nicht. "1", "1.1", "1.2", ... "1.9" und dann? "1.10" oder "2" oder "2.0"? Und bis wie weit soll gezählt werden?
Jan
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Freitag 22. August 2003, 12:32

Ich hab deine Entschuldigung mal als Änderungswunsch interpretiert und das zurückvertauscht... Ich weiß auch nicht ganz wie dein System genau sein soll, aber mit os.listdir bekommst du eine Liste aller Deitennamen eines Verzeichnisses. Die müsstest du dann nur noch systematisch abarbeiten und wieder neu speichern.
PenPen

Freitag 22. August 2003, 12:48

Oki
Hm 1.1 usw ist eventuell doch eher kompliziert
Denke es würde auch reichen wenn ich die datei irgendwas-1.csv nennen würde und dann hochzählen würde.
Das würde dann von 1 bis ca. 200 hochgezählt werden
PenPen

Freitag 22. August 2003, 13:25

Ich habe mir eigentlich vorgestellt das ich irgendwas-1.csv eingebe und das das Programm dann so lange hcohzählt und die dateien bearbeitet bis die hochzählung zu ihrem Ende angekommen ist und damit die letzte Datei bearbeitet ist.

@Milan Danke für die Änderung
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Freitag 22. August 2003, 13:33

Hallo!
PenPen hat geschrieben:Hm 1.1 usw ist eventuell doch eher kompliziert
Möglichkeiten gibts viele. Auch das mit dem "1.1" etc. wäre machbar, wenn denn die Regeln klar sind. Bleiben wir mal bei der einfachen Zählung:

Du könntest das Modul glob verwenden.
import glob
dateiliste = glob.glob("/mein/pfad/irgendwas-*.csv")

Dann wären alle Dateien mit "irgendwas-" am Anfang und ".csv" am Ende in der Liste.

Mehr Kontrolle über die zu berücksichtigenden Dateien hättest Du so:

Code: Alles auswählen

import os,re
for datei in os.listdir("/mein/pfad"):
    if re.search("^irgendwas-[0-9]+.csv$",datei):
        pass # Dateiaktionen
Die if-Bedingung kannst Du so komplex wie nötig gestalten.

Nachteil der obigen beiden Lösungen: Die Dateien sind nicht in nummerischer Reihenfolge. Da wäre eine Zählschleife (eventuell mit Abbruchbedingung) vielleicht besser:

Code: Alles auswählen

for i in range(1,200):
    try:
        f = open("/mein/pfad/irgendwas-%d.csv"%(i))
        # Dateiaktionen
        f.close()
    except IOError:
        pass # Datei gibt's dann wohl nicht
Jan
PenPen

Dienstag 26. August 2003, 08:19

Hallo nochmal
erstmal danke für die Lösungen, ich habe mich für die letzte entschieden. Allerdings habe ich jetzt wieder ein Problem.
Wenn ich das Programm jetzt ausführe gibt es nur die letzte Datei aus, die anderen bearbeitet es entweder nicht oder überschreibt sie.
Hier mal mein Code da ich keine Lösung finde oder den Wald vor lauter Bäumen nicht sehe.

Code: Alles auswählen

Datei = raw_input() # Pfad der zu modiviezierenden Datei eingeben
print "\n"
print "Bitte neuen Dateinamen eingeben "
print ">>>"
neu = raw_input() #Benutzer soll den Pfad der neuen Datei angeben

i = 1

print i
for j in range(1,10): 
    try:
	v = open(Datei + "-%d.csv"  %(j)) 
	# Dateiaktionen 

	import string
	import csv       	

# Die naechsten 2 Blöcke ändern  ' ' zu '_' und ';' zu ' ' und speichern dies. 
        transtable =     string.maketrans(' ','_')
	f = v   #open(Datei, 'r')  
	text = f.read() 
	f.close() 
	text = text.translate(transtable)
	f = open(neu, 'w') 
	f.write(text) 
	f.close()

	v.close() 

	transtable = string.maketrans(';',' ')
	e = open(neu, 'r') 
	text = e.read() 
	e.close() 
	text = text.translate(transtable)
	e = open(neu, 'w+') 
	e.write(text) 
	e.close()
	
	# letzter Block nimmt Untergliederung vor  
	def numworte(s):
	    list = string.split(s)
	    return len(list)# gibt Anzahl der Elemente in einer Liste zurück
	inp = open(neu,"r+")
	line = inp.readline()
	for line in inp.readlines():
	    list = string.split(line)
	    i = 0
	    n = len(list)
	    if i == 0:      
		inp.write('- ')
		inp.write(list[0])
		inp.write('\n')
	    for  i in range (1,n):
		inp.write('   - ') 
		inp.write(list[i]) 
		inp.write('\n')
	inp.close()

	
    except IOError: 
	pass # Datei gibt's dann wohl nicht

	
#Rückumwandlung der "_" in " "
transtable = string.maketrans('_',' ')
t = open(neu, 'r') 
text = t.read() 
t.close() 
text = text.translate(transtable)
t = open(neu, 'w') 
t.write(text) 
t.close()

#Ausgabe der neuen Datei zu Kontrolle 
x = open(neu, 'r') 
print x.read()
x.close()
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Dienstag 26. August 2003, 09:00

Hallo!
Kannst Du den Code nochmal in [code] [/code] einschließen, damit die Einrückungen erhalten bleiben (und vielleicht auf die Teile beschränken, die für die Fehlersuche wichtig/ausreichend sind)? BTW: Wenn Du registiert wärst, könntest Du Deinen Beitrag nachträglich entsprechend editierten ;-)
Jan
PenPen

Dienstag 26. August 2003, 10:07

Hat sich erledigt, aber trotzdem Danke
zum Code wie ich ihn vorher gepostet habe ich weis das er zum Teil stumpfsinnig ist usw
Servus Markus
Antworten