Hallo,
Ich habe ein Textfile und würde gerne eine aufsteigende Zahlenreihe von 1 bis "id" einfügen. irgendwie funktioniert das aber nicht so, wie ich mir das vorstelle.
Hier mein skript:
#!/usr/bin/python
import sys
# Dateiname ermitteln
dateiname = sys.argv[1]
# Datei lesen
try:
datei = open(dateiname, 'r')
zeilen = datei.readlines()
datei.close()
except IOError:
print dateiname, "ist nicht lesbar"
sys.exit(1)
# Leerzeile und Zahlenreihe einfügen
id = input("Geben Sie die id-Anzahl ein: ")
for i in range(0,id*6,6):
zeilen.insert(i,"\n")
for x in zeilen:
if x < id:
x = 1
x = x + 1
else:
break
# Datei schreiben
try:
datei = open(dateiname, 'w')
datei.writelines(zeilen)
datei.close()
except IOError:
print dateiname, "ist nicht schreibbar"
Eine andere Variante hab ich auch probiert, aber das geht auch nicht:
# Leerzeile und Zahlenreihe einfügen
id = input("Geben Sie die id-Anzahl ein: ")
for i in range(0,id*6,6):
zeilen.insert(i,"\n")
for j in range(id):
print j
das mit dem "print j" ist mir schon klar, daß das nicht funktionieren kann, aber was soll ich sonst hinschreiben...
hoffe, ihr habt eine Lösung,
lg Claudia
Aufsteigende Zahlenreihe in Textfile
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Du solltest Source-Code immer in [python]-Tags setzten!
Kannst du nicht mal eine Varinate Posten, die ohne eine Datei auskommt, also den Dateiinhalt als String/Liste in's Skript schreiben. Dann kann jeder es auch mal selber Probieren...
Kannst du nicht mal eine Varinate Posten, die ohne eine Datei auskommt, also den Dateiinhalt als String/Liste in's Skript schreiben. Dann kann jeder es auch mal selber Probieren...
[quote="jens"]Du solltest Source-Code immer in
Code: Alles auswählen
-Tags setzten!
Kannst du nicht mal eine Varinate Posten, die ohne eine Datei auskommt, also den Dateiinhalt als String/Liste in's Skript schreiben. Dann kann jeder es auch mal selber Probieren...[/quote]
Hier die Ausgangsdatei:
-0.876408984375000E+05 0.277388000000750E+06
-0.876667968750000E+05 0.277433000000750E+06
-0.877375000000000E+05 0.277362500000750E+06
-0.877375000000000E+05 0.277362500000750E+06
-0.875908984365000E+05 0.277388000000750E+06
-0.876167968740000E+05 0.277433000000750E+06
-0.876874999990000E+05 0.277362500000750E+06
-0.876874999990000E+05 0.277362500000750E+06
-0.875408984383500E+05 0.277388000000750E+06
-0.875667968758500E+05 0.277433000000750E+06
-0.876375000008500E+05 0.277362500000750E+06
-0.876375000008500E+05 0.277362500000750E+06
-0.874908984373500E+05 0.277388000000750E+06
-0.875167968748500E+05 0.277433000000750E+06
-0.875874999998500E+05 0.277362500000750E+06
-0.875874999998500E+05 0.277362500000750E+06
-0.874408984363500E+05 0.277388000000750E+06
-0.874667968738500E+05 0.277433000000750E+06
-0.875374999988500E+05 0.277362500000750E+06
-0.875374999988500E+05 0.277362500000750E+06
-0.873908984382000E+05 0.277388000000750E+06
-0.874167968757000E+05 0.277433000000750E+06
-0.874875000007000E+05 0.277362500000750E+06
-0.874875000007000E+05 0.277362500000750E+06
Bearbeitet sollte sie dann so aussehen:
1
-0.876408984375000E+05 0.277388000000750E+06
-0.876667968750000E+05 0.277433000000750E+06
-0.877375000000000E+05 0.277362500000750E+06
-0.877375000000000E+05 0.277362500000750E+06
2
-0.875908984365000E+05 0.277388000000750E+06
-0.876167968740000E+05 0.277433000000750E+06
-0.876874999990000E+05 0.277362500000750E+06
-0.876874999990000E+05 0.277362500000750E+06
3
-0.875408984383500E+05 0.277388000000750E+06
-0.875667968758500E+05 0.277433000000750E+06
-0.876375000008500E+05 0.277362500000750E+06
-0.876375000008500E+05 0.277362500000750E+06
4
-0.874908984373500E+05 0.277388000000750E+06
-0.875167968748500E+05 0.277433000000750E+06
-0.875874999998500E+05 0.277362500000750E+06
-0.875874999998500E+05 0.277362500000750E+06
5
-0.874408984363500E+05 0.277388000000750E+06
-0.874667968738500E+05 0.277433000000750E+06
-0.875374999988500E+05 0.277362500000750E+06
-0.875374999988500E+05 0.277362500000750E+06
6
-0.873908984382000E+05 0.277388000000750E+06
-0.874167968757000E+05 0.277433000000750E+06
-0.874875000007000E+05 0.277362500000750E+06
-0.874875000007000E+05 0.277362500000750E+06
7
.
.
.
.
.
.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Was hälst du hier von:
Ich würde nur nicht print verwenden, sondern direkt aus der Quellen-Datei lesen, einfügen und direkt in eine neue Datei schreiben...
Ist glaub ich einfacher, als alles in eine Liste zu lesen und mit insert zu bearbeiten.
Code: Alles auswählen
zeilen = """-0.876408984375000E+05 0.277388000000750E+06
-0.876667968750000E+05 0.277433000000750E+06
-0.877375000000000E+05 0.277362500000750E+06
-0.877375000000000E+05 0.277362500000750E+06
-0.875908984365000E+05 0.277388000000750E+06
-0.876167968740000E+05 0.277433000000750E+06
-0.876874999990000E+05 0.277362500000750E+06
-0.876874999990000E+05 0.277362500000750E+06
-0.875408984383500E+05 0.277388000000750E+06
-0.875667968758500E+05 0.277433000000750E+06
-0.876375000008500E+05 0.277362500000750E+06
-0.876375000008500E+05 0.277362500000750E+06
-0.874908984373500E+05 0.277388000000750E+06
-0.875167968748500E+05 0.277433000000750E+06
-0.875874999998500E+05 0.277362500000750E+06
-0.875874999998500E+05 0.277362500000750E+06
-0.874408984363500E+05 0.277388000000750E+06
-0.874667968738500E+05 0.277433000000750E+06
-0.875374999988500E+05 0.277362500000750E+06
-0.875374999988500E+05 0.277362500000750E+06
-0.873908984382000E+05 0.277388000000750E+06
-0.874167968757000E+05 0.277433000000750E+06
-0.874875000007000E+05 0.277362500000750E+06
-0.874875000007000E+05 0.277362500000750E+06"""
zeilen = zeilen.split("\n")
# Leerzeile und Zahlenreihe einfügen
id = int(input("Geben Sie die id-Anzahl ein: "))
i = 0
count = 0
for line in zeilen:
i += 1
if i == id:
i = 0
count += 1
print count
print line
Ist glaub ich einfacher, als alles in eine Liste zu lesen und mit insert zu bearbeiten.
ich würds mal mit dem csv Module probieren, ist zwar eigentlich zum schrieben von csv Dateien gedacht aber man kann auch Textfiles damit erstellen.
Beispiel:
Beispiel:
Code: Alles auswählen
import csv
def writeCSV(self):
temp_content = []
i=1
j=6
x=1
# Datei auslesen und in jeder 6. Zeile x einfügen
reader = csv.reader(open("Deine Datei.txt", "rb"))
for row in reader:
if i == j:
temp_row = [ x ]
temp_content.append(temp_row)
i = 1
x += 1
else:
temp_content.append(row)
i += 1
# Datei schreiben
writer = csv.writer(open(self.data_path + "Settings.csv", "wb"))
for row in temp_content:
writer.writerow(row)
jens hat geschrieben:Was hälst du hier von:Ich würde nur nicht print verwenden, sondern direkt aus der Quellen-Datei lesen, einfügen und direkt in eine neue Datei schreiben...Code: Alles auswählen
zeilen = """-0.876408984375000E+05 0.277388000000750E+06 -0.876667968750000E+05 0.277433000000750E+06 -0.877375000000000E+05 0.277362500000750E+06 -0.877375000000000E+05 0.277362500000750E+06 -0.875908984365000E+05 0.277388000000750E+06 -0.876167968740000E+05 0.277433000000750E+06 -0.876874999990000E+05 0.277362500000750E+06 -0.876874999990000E+05 0.277362500000750E+06 -0.875408984383500E+05 0.277388000000750E+06 -0.875667968758500E+05 0.277433000000750E+06 -0.876375000008500E+05 0.277362500000750E+06 -0.876375000008500E+05 0.277362500000750E+06 -0.874908984373500E+05 0.277388000000750E+06 -0.875167968748500E+05 0.277433000000750E+06 -0.875874999998500E+05 0.277362500000750E+06 -0.875874999998500E+05 0.277362500000750E+06 -0.874408984363500E+05 0.277388000000750E+06 -0.874667968738500E+05 0.277433000000750E+06 -0.875374999988500E+05 0.277362500000750E+06 -0.875374999988500E+05 0.277362500000750E+06 -0.873908984382000E+05 0.277388000000750E+06 -0.874167968757000E+05 0.277433000000750E+06 -0.874875000007000E+05 0.277362500000750E+06 -0.874875000007000E+05 0.277362500000750E+06""" zeilen = zeilen.split("\n") # Leerzeile und Zahlenreihe einfügen id = int(input("Geben Sie die id-Anzahl ein: ")) i = 0 count = 0 for line in zeilen: i += 1 if i == id: i = 0 count += 1 print count print line
Ist glaub ich einfacher, als alles in eine Liste zu lesen und mit insert zu bearbeiten.
Code: Alles auswählen
Ich bin Programmier-Anfängerin und daher hab ich soviel wie noch gar keine Ahnung vom Programmieren ;-(
habs jetzt so mal probiert:
zeilen = open("d:/diplomarbeit/dtm/testgebiet/ausgabe4.txt")
aus = open("d:/diplomarbeit/dtm/testgebiet/ausgabe5.txt","w")
zeilen = zeilen.split("\n")
# Leerzeile und Zahlenreihe einfügen
id = int(input("Geben Sie die id-Anzahl ein: "))
i = 0
count = 0
for line in zeilen:
i += 1
if i == id:
i = 0
count += 1
aus.write()
Das funktioniert leider nicht... was ist denn da wieder falsch...
Hallo,
hier mal eine vollkommen ungetestete Version:
Probiers einfach mal aus!
MfG,
ein Gast
hier mal eine vollkommen ungetestete Version:
Code: Alles auswählen
inputFile = file("d:/diplomarbeit/dtm/testgebiet/ausgabe4.txt")
outputFile = file("d:/diplomarbeit/dtm/testgebiet/ausgabe5.txt","w")
counter = 0
id = 0
for line in inputFile:
counter += 1
if counter == 4:
counter = 0
id += 1
outputFile.write(str(id))
outputFile.write(line)
inputFile.close()
outputFile.close()
MfG,
ein Gast
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Code: Alles auswählen
infile = file("test.txt")
outfile = file("test2.txt","w")
# Leerzeile und Zahlenreihe einfügen
id = int(input("Geben Sie die id-Anzahl ein: "))
i = 0
count = 0
for line in infile:
i += 1
if i == id:
i = 0
count += 1
outfile.write("%s\n" % count)
outfile.write(line)
infile.close()
outfile.close()
jens hat geschrieben:Code: Alles auswählen
infile = file("test.txt") outfile = file("test2.txt","w") # Leerzeile und Zahlenreihe einfügen id = int(input("Geben Sie die id-Anzahl ein: ")) i = 0 count = 0 for line in infile: i += 1 if i == id: i = 0 count += 1 outfile.write("%s\n" % count) outfile.write(line) infile.close() outfile.close()
Danke Jens, soweit funktioniert es... ein problem gibt es noch: warum fängt python erst in der vierten zeile zum zählen an, und nicht in der ersten??
-0.876408984375000E+05 0.277388000000750E+06
-0.876667968750000E+05 0.277433000000750E+06
-0.877375000000000E+05 0.277362500000750E+06
1
-0.877375000000000E+05 0.277362500000750E+06
-0.875908984365000E+05 0.277388000000750E+06
-0.876167968740000E+05 0.277433000000750E+06
-0.876874999990000E+05 0.277362500000750E+06
2
-0.876874999990000E+05 0.277362500000750E+06
-0.875408984383500E+05 0.277388000000750E+06
-0.875667968758500E+05 0.277433000000750E+06
-0.876375000008500E+05 0.277362500000750E+06
3
-0.876375000008500E+05 0.277362500000750E+06
-0.874908984373500E+05 0.277388000000750E+06
-0.875167968748500E+05 0.277433000000750E+06
-0.875874999998500E+05 0.277362500000750E+06
4
-0.875874999998500E+05 0.277362500000750E+06
-0.874408984363500E+05 0.277388000000750E+06
-0.874667968738500E+05 0.277433000000750E+06
-0.875374999988500E+05 0.277362500000750E+06
5
-0.875374999988500E+05 0.277362500000750E+06
-0.873908984382000E+05 0.277388000000750E+06
-0.874167968757000E+05 0.277433000000750E+06
-0.874875000007000E+05 0.277362500000750E+06
6
-0.874875000007000E+05 0.277362500000750E+06
-0.873408984372000E+05 0.277388000000750E+06
-0.873667968747000E+05 0.277433000000750E+06
-0.874374999997000E+05 0.277362500000750E+06
Code: Alles auswählen
for line in infile:
if i == id:
i = 0
count += 1
outfile.write("%s\n" % count)
i += 1 # <------- !!!
outfile.write(line)
Habe mal i += 1 nach der if-Schleife eingefügt. Das Ergebnis sieht dann so aus:
Code: Alles auswählen
sabba@pc-sarge:~/programmieren/python/Codebeispiele$ ./Zeilen-einfuegen-hochzaehlen.py
Geben Sie die id-Anzahl ein: 4
sabba@pc-sarge:~/programmieren/python/Codebeispiele$ cat ./test2.txt
-0.876408984375000E+05 0.277388000000750E+06
-0.876667968750000E+05 0.277433000000750E+06
-0.877375000000000E+05 0.277362500000750E+06
-0.877375000000000E+05 0.277362500000750E+06
1
-0.875908984365000E+05 0.277388000000750E+06
-0.876167968740000E+05 0.277433000000750E+06
-0.876874999990000E+05 0.277362500000750E+06
-0.876874999990000E+05 0.277362500000750E+06
2
-0.875408984383500E+05 0.277388000000750E+06
-0.875667968758500E+05 0.277433000000750E+06
-0.876375000008500E+05 0.277362500000750E+06
-0.876375000008500E+05 0.277362500000750E+06
3
-0.874908984373500E+05 0.277388000000750E+06
-0.875167968748500E+05 0.277433000000750E+06
-0.875874999998500E+05 0.277362500000750E+06
-0.875874999998500E+05 0.277362500000750E+06
4
-0.874408984363500E+05 0.277388000000750E+06
-0.874667968738500E+05 0.277433000000750E+06
-0.875374999988500E+05 0.277362500000750E+06
-0.875374999988500E+05 0.277362500000750E+06
in der ersten Zeilen muß 1 stehen... das textfile soll dann in einem gis programm polygone erstellen...dh die datei muß unbedingt mit 1 beginnen, damit das programm die koordinaten richtig zuordnen kannMr_Snede hat geschrieben:Jens hat in der if-Schleife i um 1 erhöht bevor er i == id überprüft.Code: Alles auswählen
for line in infile: if i == id: i = 0 count += 1 outfile.write("%s\n" % count) i += 1 # <------- !!! outfile.write(line)
Habe mal i += 1 nach der if-Schleife eingefügt. Das Ergebnis sieht dann so aus:cu SebastianCode: Alles auswählen
sabba@pc-sarge:~/programmieren/python/Codebeispiele$ ./Zeilen-einfuegen-hochzaehlen.py Geben Sie die id-Anzahl ein: 4 sabba@pc-sarge:~/programmieren/python/Codebeispiele$ cat ./test2.txt -0.876408984375000E+05 0.277388000000750E+06 -0.876667968750000E+05 0.277433000000750E+06 -0.877375000000000E+05 0.277362500000750E+06 -0.877375000000000E+05 0.277362500000750E+06 1 -0.875908984365000E+05 0.277388000000750E+06 -0.876167968740000E+05 0.277433000000750E+06 -0.876874999990000E+05 0.277362500000750E+06 -0.876874999990000E+05 0.277362500000750E+06 2 -0.875408984383500E+05 0.277388000000750E+06 -0.875667968758500E+05 0.277433000000750E+06 -0.876375000008500E+05 0.277362500000750E+06 -0.876375000008500E+05 0.277362500000750E+06 3 -0.874908984373500E+05 0.277388000000750E+06 -0.875167968748500E+05 0.277433000000750E+06 -0.875874999998500E+05 0.277362500000750E+06 -0.875874999998500E+05 0.277362500000750E+06 4 -0.874408984363500E+05 0.277388000000750E+06 -0.874667968738500E+05 0.277433000000750E+06 -0.875374999988500E+05 0.277362500000750E+06 -0.875374999988500E+05 0.277362500000750E+06
Code: Alles auswählen
inputFile = file("d:/diplomarbeit/dtm/testgebiet/ausgabe4.txt")
outputFile = file("d:/diplomarbeit/dtm/testgebiet/ausgabe5.txt","w")
counter = 0
id = 1
outputFile.write(str(id))
for line in inputFile:
if counter == 4:
counter = 0
id += 1
outputFile.write(str(id))
counter += 1
outputFile.write(line)
inputFile.close()
outputFile.close()
Oh da habe wohl nicht ganz aufgepasst, so sieht es nun bei mir aus:
Code: Alles auswählen
#!/usr/bin/python
# -*- encoding: latin-1 -*-
infile = file("test.txt")
outfile = file("test2.txt","w")
# Leerzeile und Zahlenreihe einfuegen
id = int(input("Geben Sie die id-Anzahl ein: "))
i = 0
count = 1
outfile.write("%s\n" % count)
for line in infile:
if i == id:
i = 0
count += 1
outfile.write("%s\n" % count)
i += 1
outfile.write(line)
infile.close()
outfile.close()
sabba@pc-sarge:~/programmieren/python/Codebeispiele$ ./Zeilen-einfuegen-hochzaehlen.py
Geben Sie die id-Anzahl ein: 4
sabba@pc-sarge:~/programmieren/python/Codebeispiele$ cat ./test2.txt
1
-0.876408984375000E+05 0.277388000000750E+06
-0.876667968750000E+05 0.277433000000750E+06
-0.877375000000000E+05 0.277362500000750E+06
-0.877375000000000E+05 0.277362500000750E+06
2
-0.875908984365000E+05 0.277388000000750E+06
-0.876167968740000E+05 0.277433000000750E+06
-0.876874999990000E+05 0.277362500000750E+06
-0.876874999990000E+05 0.277362500000750E+06
3
-0.875408984383500E+05 0.277388000000750E+06
-0.875667968758500E+05 0.277433000000750E+06
-0.876375000008500E+05 0.277362500000750E+06
-0.876375000008500E+05 0.277362500000750E+06
Eine Variante mit "Zählvariable" weniger:
Die Zeilennummer kommt jetzt von `enumerate()` und muss nicht mehr "von Hand" hochgezählt werden.
Code: Alles auswählen
infile = open('test.txt', 'r')
outfile = open('test2.txt', 'w')
lines_per_group = int(raw_input('Anzahl der Zeilen pro Gruppe? '))
group_nr = 1
for line_nr, line in enumerate(infile):
if (line_nr % lines_per_group) == 0:
outfile.write('%d\n' % group_nr)
group_nr += 1
outfile.write(line)
infile.close()
outfile.close()
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Dazu braucht man also enumerate() Aber bis ich es wieder gebrauchen kann, hab ich es auch schon wieder vergessen und mach es per HandBlackJack hat geschrieben:Die Zeilennummer kommt jetzt von `enumerate()` und muss nicht mehr "von Hand" hochgezählt werden.
Danke an euch alle für eure mühen...habt mir wirklich sehr geholfen und ich hab endlich meine polygone erstellen können...
lg claudia
lg claudia