Aus Liste String finden

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
DjFresH
User
Beiträge: 36
Registriert: Donnerstag 20. November 2008, 08:28

Montag 15. Dezember 2008, 09:36

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?
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Montag 15. Dezember 2008, 09:53

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

Montag 15. Dezember 2008, 10:20

@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.
DjFresH
User
Beiträge: 36
Registriert: Donnerstag 20. November 2008, 08:28

Montag 15. Dezember 2008, 10:34

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?
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Montag 15. Dezember 2008, 10:54

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

Montag 15. Dezember 2008, 11:13

Und danach das Tutorial aus der Python-Dokumentation durcharbeiten.
DjFresH
User
Beiträge: 36
Registriert: Donnerstag 20. November 2008, 08:28

Montag 15. Dezember 2008, 11:44

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

Montag 15. Dezember 2008, 12:44

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.
DjFresH
User
Beiträge: 36
Registriert: Donnerstag 20. November 2008, 08:28

Montag 15. Dezember 2008, 13:47

...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?
Lonestar
User
Beiträge: 147
Registriert: Samstag 9. August 2008, 08:31

Montag 15. Dezember 2008, 14:28

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
Benutzeravatar
pengo
User
Beiträge: 15
Registriert: Dienstag 10. Oktober 2006, 22:28

Montag 15. Dezember 2008, 15:18

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
DjFresH
User
Beiträge: 36
Registriert: Donnerstag 20. November 2008, 08:28

Montag 15. Dezember 2008, 16:30

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...
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Montag 15. Dezember 2008, 16:38

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:
DjFresH
User
Beiträge: 36
Registriert: Donnerstag 20. November 2008, 08:28

Montag 15. Dezember 2008, 17:13

@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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Montag 15. Dezember 2008, 20:29

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 ;-)
Antworten