Aufsteigende Zahlenreihe in Textfile

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
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
.
.
.
.
.
.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Buell
User
Beiträge: 90
Registriert: Samstag 29. Oktober 2005, 14:17

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
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
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

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
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
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()
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

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
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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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:

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
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
Antworten