File durchsuchen

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.
t3c404
User
Beiträge: 11
Registriert: Mittwoch 15. Februar 2017, 11:07

File durchsuchen

Beitragvon t3c404 » Mittwoch 15. Februar 2017, 16:48

Hallo liebe Python Freunde!

Ich hab vor kurzem mit Pyhton angefangen und bin ganz neu hier. Ich hab jetzt eine Aufgabe, wobei ich ein File durchsuchen muss.
Ich soll einen kleinen Buchstaben finden wo links und rechts jeweils 3 Großbuchstaben sind.
Meine Idee ist es alles in eine Liste zu machen und dann nach den Kleinbuchstaben zu suchen.
Soweit funktioniert das auch. Aber geht es auch, dass ich sage and dem Index von dem gefundenen Buchstaben +3 und - 3 müssen Großbuchstaben sein? Oder gibt es einen einfacheren Weg?
Ich hoffe Ihr versteht was ich meine.
Hier ist mein Code bisher!
Ich möchte nicht gleich die Lösung, sondern Hinweise wie ich das lösen kann. Ich möchte da selbst dran rum probieren, aber gerade komme ich einfach nicht weiter!

  1. """with open("BigBodyguards.txt", "w") as my_file:
  2.    pass"""
  3. def bigbodyguards():
  4.     with open("BigBodyguards.txt", "r") as my_file:
  5.         new = []
  6.         for lines in my_file:
  7.             for ch in lines:
  8.                 new.append(ch)
  9.         llist = []
  10.         for l in new:
  11.             llist.append(l)
  12.  
  13.         new_list = []
  14.         for i in llist:
  15.             if i == i.lower():
  16.                 print i
  17.                 #new_list.append(llist.index(i))
  18.     return new_list
  19.  
  20.  
  21. print bigbodyguards()


Vielen Dank im Vorraus.
Zuletzt geändert von Anonymous am Mittwoch 15. Februar 2017, 17:08, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

Re: File durchsuchen

Beitragvon BlackJack » Mittwoch 15. Februar 2017, 17:19

Das klingt nach http://www.pythonchallenge.com/ Level 3 und wird üblicherweise mit dem `re`-Modul gelöst.
Sirius3
User
Beiträge: 6631
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: File durchsuchen

Beitragvon Sirius3 » Mittwoch 15. Februar 2017, 17:21

@t3c404: Auf Stringelemente kann man ähnlich wie auf Listenelemente zugreifen. Daher ist die Umkopiererei nicht nötig (man würde auch extend statt einer for-Schleife mit append verwenden). Was ist der Zweck des zweiten Kopierens in llist? Zum Suchen von Kleinbuchstaben: es gibt str.islower das prüft, ob ein String nur aus Kleinbuchstaben besteht. Wenn Du zusätzlich einen Index in einer for-Schleife brauchst, nimm enumerate.

Zur Namensgebung: Variablennamen sollten sagen, für was die Variable gebraucht wird. Den Typ mit kyptischen Zusätzen anzugeben ist da wenig erhellend.
t3c404
User
Beiträge: 11
Registriert: Mittwoch 15. Februar 2017, 11:07

Re: File durchsuchen

Beitragvon t3c404 » Mittwoch 15. Februar 2017, 17:28

@BlackJack
Ganz genau und vielen Dank. Werde ich mal schauen wie das funktioniert.

@Sirius3:
Das kopieren in die zweite Liste war deshalb, weil ich Probleme mit den Zeilenumbrüchen hatter beim durchsuchen.
Der "Text" besteht aus lauter Groß- und Kleinbuchstaben. Deswegen wird str.islower() nichts nutzen.
Das mit enumerate hatte ich ganz vergesse :/

Vielen Dank an euch beide für die schnelle Antwort.
t3c404
User
Beiträge: 11
Registriert: Mittwoch 15. Februar 2017, 11:07

Re: File durchsuchen

Beitragvon t3c404 » Donnerstag 16. Februar 2017, 10:35

Also ich hab meinen Code mal überarbeitet, bzw. neu geschrieben und hab da noch ne Frage dazu.
Hier erstmal der Code.

  1. import re
  2.  
  3. """with open("BigBodyguards.txt", "w") as my_file:
  4.    pass"""
  5. def bigbodyguards():
  6.     with open("BigBodyguards.txt", "r") as my_file:
  7.         text = []
  8.         for line in my_file:
  9.             for letter in line:
  10.                 text.append(letter)
  11.             text_string = "".join(text)
  12.             match = re.search(r'[a-z][A-Z][A-Z][A-Z][a-z][A-Z][A-Z][A-Z][a-z]', text_string)
  13.             #match = re.search(r'[A-Z]', text_string)
  14.     return match.group()
  15.  
  16. print bigbodyguards()


1. Ich hab auch ein Match gefunden, allerdings bin ich mir nicht sicher ob das so stimmt.
2. Wenn ich jetzt nach etwas anderem suche, z.B. match = re.search(r'[A-Z][A-Z][A-Z]', text_string), dann bekomme ich nur 1 Match. Bricht er hier beim ersten Match ab? Wenn ja, wie kann ich das umgehen, dass er mir alle Treffer in dem Text ausgibt?

Grüße

t3c404
Zuletzt geändert von Anonymous am Donnerstag 16. Februar 2017, 11:36, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
/me
User
Beiträge: 3142
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Re: File durchsuchen

Beitragvon /me » Donnerstag 16. Februar 2017, 10:42

1: [A-Z][A-Z][A-Z] kann man auch als [A-Z]{3} schreiben.
2: Es gibt auch re.findall.
t3c404
User
Beiträge: 11
Registriert: Mittwoch 15. Februar 2017, 11:07

Re: File durchsuchen

Beitragvon t3c404 » Donnerstag 16. Februar 2017, 10:49

/me hat geschrieben:1: [A-Z][A-Z][A-Z] kann man auch als [A-Z]{3} schreiben.
2: Es gibt auch re.findall.


Vielen Dank!
Es hat funktioniert :)
Also in das Reguläre Ausdrücke muss ich mich gut einarbeiten.

Hier meine Lösung:

  1. import re
  2.  
  3. """with open("BigBodyguards.txt", "w") as my_file:
  4.    pass"""
  5. def bigbodyguards():
  6.     with open("BigBodyguards.txt", "r") as my_file:
  7.         text = []
  8.         for line in my_file:
  9.             for letter in line:
  10.                 text.append(letter)
  11.             text_string = "".join(text)
  12.             match = re.findall(r'[a-z][A-Z]{3}[a-z][A-Z]{3}[a-z]', text_string)
  13.             #match = re.search(r'[A-Z]', text_string)
  14.     return match
  15.  
  16. print bigbodyguards()


Vielen Dank an alle :)
Sirius3
User
Beiträge: 6631
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: File durchsuchen

Beitragvon Sirius3 » Donnerstag 16. Februar 2017, 11:48

@t3c404: Deine Eintrückungen sind falsch.
  1. def bigbodyguards():
  2.     with open("BigBodyguards.txt", "r") as my_file:
  3.         text = []
  4.         for line in my_file:
  5.             for letter in line:
  6.                 text.append(letter)
  7.     text_string = "".join(text)
  8.     match = re.findall(r'[a-z][A-Z]{3}[a-z][A-Z]{3}[a-z]', text_string)
  9.     return match

Dann kann man extend benutzen: text.extend(line). Was aber auch noch zu umständlich ist, weil man auch einfach read verwenden könnte:
  1. def bigbodyguards():
  2.     with open("BigBodyguards.txt", "r") as my_file:
  3.         text_string = my_file.read()
  4.     return re.findall(r'[a-z][A-Z]{3}[a-z][A-Z]{3}[a-z]', text_string)
Benutzeravatar
Kebap
User
Beiträge: 355
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Re: File durchsuchen

Beitragvon Kebap » Donnerstag 16. Februar 2017, 12:20

Ohne reguläre Ausdrücke zu benutzen, um deinen ursprünglichen Ansatz fortzuführen, solltest du dir enumerate() anschauen.

Somit hast du in der Schleife nicht nur den einzelnen Buchstaben, sondern auch seinen Index, und kannst auf benachbarte Buchstaben zugreifen.
MorgenGrauen: 1 Welt, >12 Gilden, >85 Abenteuer, >1000 Waffen und Rüstungen,
>2500 NPC, >16000 Räume, >170 freiwillige Programmierer, einfach Text, seit 1992.
t3c404
User
Beiträge: 11
Registriert: Mittwoch 15. Februar 2017, 11:07

Re: File durchsuchen

Beitragvon t3c404 » Montag 20. Februar 2017, 17:35

@ Sirius3: Danke, hab es geändert. Hat aber trotz der falschen Einrücckung trotzdem funktioniert, aber ich weiß warum die falsch ist.
text_string = my_file.read() ist natürlich einfacher.

@ Kebap: Werde ich mal probieren. Vielen Dank.

Wer ist online?

Mitglieder in diesem Forum: Yahoo [Bot]