Seite 1 von 1

Aus Liste String finden

Verfasst: Montag 15. Dezember 2008, 09:36
von DjFresH
hi community,

ich habe eine datei die ich öffne und einlese.

Nun möchte ich eine bestimmte zeile finden mit einem bestimmten string
und diese dann auslesen.
Wenn ich die Datei aber einlese wird ja aus der Datei eine Liste und
die Funktion string.find.

Ich bekomme als ergebnis immer -1 obwohl der string vorhanden ist.

Was mache ich falsch?
und wie bekomme ich den gesuchten string ausgepuckt?

Re: Aus Liste String finden

Verfasst: Montag 15. Dezember 2008, 09:53
von gkuhl
DjFresH hat geschrieben:Was mache ich falsch?
Erstmal wäre es ganz praktisch zu wissen, was du genau gemacht hast. Natürlich in Form deines Codes. :wink:

Verfasst: Montag 15. Dezember 2008, 10:20
von BlackJack
@DjFresH: Wenn es nur um den Test auf "enthalten sein" geht, ist der ``in``-Operator einfacher zu handhaben als `str.find()` oder `str.index()`.

Und solltest Du wirklich die `find()`-Funktion aus dem `string`-Modul benutzen: Die sollte man nicht mehr verwenden. Ab Python 3.0 fliegt dort alles raus, was es auch als Methode auf Zeichenketten gibt.

Verfasst: Montag 15. Dezember 2008, 10:34
von DjFresH
Es ist eine Visual Studio Ressource Datei aus der ich die FileVersion herauslesen will.

Nach dem string FileVersion steht die Version die ich rauslesen will in folgender form (zB): FILEVERSION 1,0,0,1
also könnt ich doch nach FILEVERSION suchen und mir die strings danach
auslesen lassen....?!?

nun bekomme ich die fehlermeldung das find mit 'list' nicht funktioniert...
also wie mache ich das am geschicktesten?

Verfasst: Montag 15. Dezember 2008, 10:54
von .robert
DjFresH hat geschrieben:nun bekomme ich die fehlermeldung das find mit 'list' nicht funktioniert...
also wie mache ich das am geschicktesten?
Vielleicht erst einmal die Postings der anderen durchlesen...

Verfasst: Montag 15. Dezember 2008, 11:13
von BlackJack
Und danach das Tutorial aus der Python-Dokumentation durcharbeiten.

Verfasst: Montag 15. Dezember 2008, 11:44
von DjFresH
...ich weiss schon wie man ein wort findet...

wie geht das das die folgenen 10 bytes von mir aus nach dem gesuchten wort geprinted werden...?

Verfasst: Montag 15. Dezember 2008, 12:44
von BlackJack
Man findet ein Wort nicht mit `string.find()` auch wenn das technisch möglich ist. Und dass Du versuchst das auf eine Liste anzuwenden, zeugt auch nicht gerade davon, dass Du weisst was Du tust.

Wie man Teilstücke von Zeichenketten erstellt, steht auch im Tutorial.

Verfasst: Montag 15. Dezember 2008, 13:47
von DjFresH
...ok hier ist ein teil vom code:

Code: Alles auswählen

import string

f = open("xxx.rc","r")
data = f.read()
search = "FILEVERSION"
index = data.find(search)
print index
f.close()
...naja string gefunden schön und gut...
...ich meinte halt das diese zeile folgendermaßen aussieht:

Code: Alles auswählen

 FILEVERSION 1,0,5,7
da sich die zahl nach jedem build erhöht kann ich ja nur das wort davor
suchen und irgendwie soll er mir vom wort aus gesehen die nächsten
zeichen ausgeben...

...mal ne andre frage :
die versions nummer steht ja auch in den eigenschaften der
xxx.exe... kann man diesen tag auslesen?

Verfasst: Montag 15. Dezember 2008, 14:28
von Lonestar
na, du liest aber schon die Antworten auf deine posts, oder? Nur anscheinend nicht gerne Tutorials...
ich vermute mal das du sowas in der Art machen möchtest

Code: Alles auswählen

>>> search = "FILEVERSION "
>>> x = "FILEVERSION 1,0,5,7"
>>> index = x.find(search)
>>>print x[index + len(search):]
1,0,5,7
>>> 
allerdings wird das mit deinem geopsteten code nicht sauber laufen, es sei denn der String in dem deine fileversion steht ist direkt in der ersten Zeile der geöffneten Datei zu finden. Ansonsten müsstest du so lange durch die Zeilen der Datei laufen bis du den srting"FILEVERSION " findest

könnte man auch so machen

Verfasst: Montag 15. Dezember 2008, 15:18
von pengo
Guten Tag zusammen,

könnte man doch auch rein theoretisch ^^ so machen

Code: Alles auswählen

import re

f = open("test.txt", "r")
data = f.read()
preg = "^FILEVERSION ([\d,]*)" # alle Zahlen
#preg = "^FILEVERSION (\d*)" #nur die erste Zahl
m = re.search(preg, data)
print m.group(1)
Gruß pengo

Verfasst: Montag 15. Dezember 2008, 16:30
von DjFresH

Code: Alles auswählen

import string

f = open("xxx.rc","r")
g = open("Version.txt","w")

data = f.read()

search = '"ProductVersion"'

index = data.find(search)
index_end = data.find("\n",index)

print data[index:index_end]

nomber = data[index+19:index_end-3]
version = nomber.replace(".","")

nliste = version.split()
print nliste

versionmajor = nliste[0]
versionminor = nliste[1]
revision = nliste[2]
...hier meine lösung...
...und danke für eure vorschläge...

Verfasst: Montag 15. Dezember 2008, 16:38
von numerix
DjFresH hat geschrieben:...hier meine lösung...
...und danke für eure vorschläge...
Hättest du dich mit diesen Vorschlägen ernsthaft beschäftigt, hätte das ein echter Lernzuwachs für dich sein können. Tja, Chance nicht genutzt ... :cry:

Verfasst: Montag 15. Dezember 2008, 17:13
von DjFresH
@pengo....is auch ne gute lösung...

Code: Alles auswählen

import re 

f = open("xxx.rc", "r") 
data = f.read() 
preg = "PRODUCTVERSION ([\d,]*)" # alle Zahlen

m = re.search(preg, data) 
no = m.group(1)
lno = no.replace(",",".")
liste = lno.split(".")
vma = liste[0]
vmi = liste[1]
rev = liste[2]

print vma+"."+vmi+"."+rev

f.close()

Code: Alles auswählen

>>> 
1.0.5

Verfasst: Montag 15. Dezember 2008, 20:29
von Hyperion

Code: Alles auswählen

lno = no.replace(",",".")
liste = lno.split(".")
vma = liste[0]
vmi = liste[1]
rev = liste[2]

print vma+"."+vmi+"."+rev
Nein wie geil :-D
Was man nicht alles für einen "." tut ;-)