hallo,
ich habe einen string z.B '56\t89\t78\n'
wobei dieser aus einer datei eingelesen wird.
nun möchte ich aus diesem string die zahlen extrahieren und in eine neue liste schreiben, damit man mit den zahlen rechnen kann?
danke
string nach zahlen scannen
danke, aber wenn ich z.B folgenden String habe:
'1.155E+3\r1.157E+3\r1.131E+3'
und ich re.findall('\d',"...")
dann kriege ich natürlich:
['1', '1', '5', '5', '3', '1', '1', '5', '7', '3', '1', '1', '3', '1', '3']
wie kriege ich denn aber:
['1.155E+3','1.157E+3','1.131E+3']
ich befürchte, dass es eine einfachere art gibt eine datei auszulesen...
leider funktionierts mit load nicht (--->load von pylab) da meine einträge in der datei aus zeilen und leerzeile und spalten ... bestehen.
'1.155E+3\r1.157E+3\r1.131E+3'
und ich re.findall('\d',"...")
dann kriege ich natürlich:
['1', '1', '5', '5', '3', '1', '1', '5', '7', '3', '1', '1', '3', '1', '3']
wie kriege ich denn aber:
['1.155E+3','1.157E+3','1.131E+3']
ich befürchte, dass es eine einfachere art gibt eine datei auszulesen...
leider funktionierts mit load nicht (--->load von pylab) da meine einträge in der datei aus zeilen und leerzeile und spalten ... bestehen.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
OK, dann ist RE vielleicht keine gute Idee
Versuche erstmal die Daten in einer For Schleife auseinander zu pflücken. Also mit readlines() einlesen und dann mit spit() arbeiten.
Die Zahlen selber sind ja erstmal Strings. Du kannst diese mit int(), long(), float() usw. umwandeln, siehe: http://docs.python.org/dev/library/stdt ... pesnumeric
Versuche erstmal die Daten in einer For Schleife auseinander zu pflücken. Also mit readlines() einlesen und dann mit spit() arbeiten.
Die Zahlen selber sind ja erstmal Strings. Du kannst diese mit int(), long(), float() usw. umwandeln, siehe: http://docs.python.org/dev/library/stdt ... pesnumeric
ok, also mit re.findall geht es, wenn man
re.findall('\d{3}\E\+\d{1}',"STRING")
macht, ist aber ein wenig unflexibel, sollte sobald man eine größere zahl hat nicht funktionieren...
ich versuch mal,dass was du eben vorgeschlagen hast
re.findall('\d{3}\E\+\d{1}',"STRING")
macht, ist aber ein wenig unflexibel, sollte sobald man eine größere zahl hat nicht funktionieren...
ich versuch mal,dass was du eben vorgeschlagen hast
Kurze Frage zum Dateiformat:
Kann es sein, das es sich dabei um eine Datei im TSV-Format handelt ?
(TSV = Tab Separated Values, ein Verwandter des CSV-Formats in dem als Trennzeichen zwischen den Spalten ein Tab-Zeichen verwendet wird)
Wenn ja: So weit ich weiss, kann man dem CSV-Reader das verwendete Trennzeichen angeben ...
Kann es sein, das es sich dabei um eine Datei im TSV-Format handelt ?
(TSV = Tab Separated Values, ein Verwandter des CSV-Formats in dem als Trennzeichen zwischen den Spalten ein Tab-Zeichen verwendet wird)
Wenn ja: So weit ich weiss, kann man dem CSV-Reader das verwendete Trennzeichen angeben ...
Für solche Fälle ist Regexp::Commonf für Perl toll:
http://search.cpan.org/perldoc?Regexp::Common
Einzusetzen wie folgt:
Und das dann copy&paste bei Python rein, kurz testen und ab dafür.
Die sind in aller Regel kompatibel zu Python.
http://search.cpan.org/perldoc?Regexp::Common
Einzusetzen wie folgt:
Code: Alles auswählen
perl -MRegexp::Common -e 'print $RE{num}{real}'
Die sind in aller Regel kompatibel zu Python.
Kann es sein, dass ein einfaches ``map(float, line.split())`` pro Zeile ausreicht!?
jo, hab diverse sachen ausprobiert!
am besten funktioniert map!
nun stehe ich vor einem "fast peinlichen" problem...
hier der code:
wie kriege ich es hin, dass am ende eine liste mit allen einträgen die im if block gemacht wurden entsteht,
denn "print a" zeigt nur die letze bearbeitete zeile an
vereinfacht meine ich:
sum = sum +x
macht man sowas mit append?
am besten funktioniert map!
nun stehe ich vor einem "fast peinlichen" problem...
hier der code:
Code: Alles auswählen
#!/usr/bin/python
from pylab import *
import string
in_file = open("/home/user1/uni/python/data.dat",'r')
data_string = in_file.readlines()
for i in range(0,len(data_string)):
a = map(float, data_string[i].split())
print a
else:
print "fertig \n",a
denn "print a" zeigt nur die letze bearbeitete zeile an
vereinfacht meine ich:
sum = sum +x
macht man sowas mit append?
Code: Alles auswählen
#!/usr/bin/python
import pylab as lab
in_file = open("/home/user1/uni/python/data.dat",'r')
data= in_file.read()
numbers = map(float, data.split())
Code: Alles auswählen
numbers = []
for line in in_file:
number += map(float, data_string[i].split())