textformat

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.
Jerala
User
Beiträge: 9
Registriert: Montag 7. August 2006, 15:03

textformat

Beitragvon Jerala » Freitag 27. Oktober 2006, 23:21

Hallo zusammen!

Bin Anfänger und muss in mein file eine sequenz einfügen, die Daten in einer bestimmten Form ins excel schreibt, also statt . als dezimalzeichen ein komma und nach jeden tabstop eine neue spalte anfängt und so.

Kann mir einer weiterhelfen welche befehle ich dafür benutzen muss? Hab zwar ein Python-Buch, aber da sowas konkretes nicht gefunden.

Dank im Voraus!
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Beitragvon Mr_Snede » Samstag 28. Oktober 2006, 03:49

Hier bietet sich das Modul csv (Comma(können auch andere Trennzeichen sein) Seperated Values) an.

Such mal hier im Forum danach.

Das Trennzeichen kann über den Parameter delimiter = ";" eingestellt werden.
Jerala
User
Beiträge: 9
Registriert: Montag 7. August 2006, 15:03

Beitragvon Jerala » Samstag 28. Oktober 2006, 11:03

Sorry, aber hab da im forum nichts gefunden, was ich gebrauchen kann. Ich habe also eine .txt-Datei, in der die Zahlen so stehen:

-152.6E-09 -150.6E-09 -152.7E-09 -152.2E-09 -151.0E-

Das Ganze muss grob ja so aussehen:

ich muss erst den Befehl:
file=...txt
Datei=open(file,'r')
lines=Datei.readlines()
Datei.close

--hier muss jetzt was eingegeben werden---
wo kommt denn hier jetzt "delimiter" hin?-hab diesem Ausdruck in meinen unterlagen nicht.WElche Struktur hat das ganze?

und dann halt der write-Befehl

HILFE!? ist dringend
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Beitragvon murph » Samstag 28. Oktober 2006, 11:24

BlackJack

Beitragvon BlackJack » Samstag 28. Oktober 2006, 11:29

Jerala hat geschrieben:Ich habe also eine .txt-Datei, in der die Zahlen so stehen:

-152.6E-09 -150.6E-09 -152.7E-09 -152.2E-09 -151.0E-


So eine Zeile kannst Du, wenn sie als Zeichenkette vorliegt, mit der `split()` Methode zerlegen:

Code: Alles auswählen

In [14]: line = '-152.6E-09 -150.6E-09 -152.7E-09 -152.2E-09'

In [15]: line.split()
Out[15]: ['-152.6E-09', '-150.6E-09', '-152.7E-09', '-152.2E-09']


Das Ganze muss grob ja so aussehen:

ich muss erst den Befehl:
file=...txt
Datei=open(file,'r')
lines=Datei.readlines()
Datei.close

--hier muss jetzt was eingegeben werden---
wo kommt denn hier jetzt "delimiter" hin?-hab diesem Ausdruck in meinen unterlagen nicht.WElche Struktur hat das ganze?


`delimiter` ist ein Schlüsselwortargument von den entsprechenden Methoden/Funktionen im `csv` Modul.
Jerala
User
Beiträge: 9
Registriert: Montag 7. August 2006, 15:03

Beitragvon Jerala » Samstag 28. Oktober 2006, 11:37

Hi Black Jack!

ja, so was einfaches suche ich, aber die Zahlen kenne ich ja nicht. Die sind quasi unsichtbar für mich in der Datei(ganz viele Zahlen in mehreren Zeilen und Spalten) und ich will die automatisch auslesen und das format umwandeln.

Hab in den älteren Einträgen des Forums, hier sowas gefunden: vielleicht kann ich das auf mein Problem zuschneiden:

Code: Alles auswählen

def commify(number, comma=",", thousand="."):
    n = str(number).split(comma)
    n[0] = list(str(n[0]))[::-1]
    n[0] = thousand.join(
            ["".join(n[0][i:i+3][::-1]) for i in     
             range(0,len(n[0]),3)][::-1])
    return comma.join(n)

print commify(100000000)
print commify(1000.58,comma=".",thousand=",")
print commify("2,45")
print commify(1234567)
print commify("22343435455423423,2344324234")


Edit (Leonidas): Code in Python-Tags gesetzt.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 28. Oktober 2006, 11:42

My god, it's full of CARs! | Leonidasvoice vs Modvoice
Jerala
User
Beiträge: 9
Registriert: Montag 7. August 2006, 15:03

Beitragvon Jerala » Samstag 28. Oktober 2006, 11:47

???
nichts - copy,paste
Jerala
User
Beiträge: 9
Registriert: Montag 7. August 2006, 15:03

Beitragvon Jerala » Samstag 28. Oktober 2006, 11:50

ach so, ok
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 28. Oktober 2006, 11:51

Jerala hat geschrieben:nichts - copy,paste

Eben nicht. Weil dann einer der Moderatoren erstmal vorbeikommen muss und deinen Post editieren muss.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Jerala
User
Beiträge: 9
Registriert: Montag 7. August 2006, 15:03

Beitragvon Jerala » Samstag 28. Oktober 2006, 12:01

Hab gedacht, so eine einfache Zeile müßte schon funktionieren, tut sie aber nicht, was ist falsch?


Code: Alles auswählen

file1='C:/XXX.txt'
file2='C:/XXX.xls'
Datei=open(file1,'r')
lines =Datei.readlines()
Datei.close()

def str_to_float(s):
    commapos = s.rfind(".")
    return float(s[:commapos].replace(".","") )

Datei=open(file2,'w')

for l in lines:
   Datei.write(l)

Datei.close()
BlackJack

Beitragvon BlackJack » Samstag 28. Oktober 2006, 12:47

Jerala hat geschrieben:Hab gedacht, so eine einfache Zeile müßte schon funktionieren, tut sie aber nicht, was ist falsch?


Du kopierst nur eine Datei in eine andere. Anscheinend versuchst Du eine Exceltabelle zu erstellen, das geht so gar nicht. Exceltabellen sind nicht einfach nur Textdateien.

Kannst Du Deine Textdatei nicht unter Excel als CSV Datei einlesen? Die Daten liegen doch schon passend vor.

Code: Alles auswählen

def str_to_float(s):
    commapos = s.rfind(".")
    return float(s[:commapos].replace(".","") )


Ich dachte die Zahlen haben schon einen Dezimalpunkt im Original!? Und diese Funktion ist eine komplizierte Art um Nachkommastellen abzuschneiden. Der interaktive Interpretierer ist immer ganz nützlich wenn man sehen will was die einzelnen Komponenten so machen:

Code: Alles auswählen

In [25]: a = '42.23'

In [26]: b = a.rfind('.')

In [27]: a[:b]
Out[27]: '42'

In [28]: a[:b].replace('.', '')
Out[28]: '42'

In [29]: float(a[:b].replace('.', ''))
Out[29]: 42.0

Wer ist online?

Mitglieder in diesem Forum: cedsoft