Seite 1 von 1

Aufsteigende Zahlenreihe in Textfile

Verfasst: Sonntag 30. Oktober 2005, 17:01
von Claudia
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

Verfasst: Sonntag 30. Oktober 2005, 17:22
von jens
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...

Verfasst: Sonntag 30. Oktober 2005, 17:31
von Gast
[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
.
.
.
.
.
.

Verfasst: Sonntag 30. Oktober 2005, 17:44
von jens
Was hälst du hier von:

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
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.

Verfasst: Sonntag 30. Oktober 2005, 17:47
von Buell
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:

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)

Verfasst: Sonntag 30. Oktober 2005, 18:32
von Claudia
jens hat geschrieben:Was hälst du hier von:

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
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



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...

Verfasst: Sonntag 30. Oktober 2005, 19:14
von Gast
Hallo,

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()
Probiers einfach mal aus!

MfG,
ein Gast

Verfasst: Sonntag 30. Oktober 2005, 19:16
von jens

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()

Verfasst: Sonntag 30. Oktober 2005, 20:37
von Claudia
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

Verfasst: Sonntag 30. Oktober 2005, 21:14
von Mr_Snede

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)
Jens hat in der if-Schleife i um 1 erhöht bevor er i == id überprüft.

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
cu Sebastian

Verfasst: Sonntag 30. Oktober 2005, 21:22
von Claudia
Mr_Snede hat geschrieben:

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)
Jens hat in der if-Schleife i um 1 erhöht bevor er i == id überprüft.

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
cu Sebastian
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 kann

Verfasst: Sonntag 30. Oktober 2005, 22:00
von Gast

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()

Verfasst: Sonntag 30. Oktober 2005, 22:20
von Mr_Snede
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

Verfasst: Sonntag 30. Oktober 2005, 23:51
von BlackJack
Eine Variante mit "Zählvariable" weniger:

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()
Die Zeilennummer kommt jetzt von `enumerate()` und muss nicht mehr "von Hand" hochgezählt werden.

Verfasst: Montag 31. Oktober 2005, 07:59
von jens
BlackJack hat geschrieben:Die Zeilennummer kommt jetzt von `enumerate()` und muss nicht mehr "von Hand" hochgezählt werden.
Dazu braucht man also enumerate() ;) Aber bis ich es wieder gebrauchen kann, hab ich es auch schon wieder vergessen und mach es per Hand :roll:

Verfasst: Montag 31. Oktober 2005, 15:59
von Claudia
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