Seite 1 von 1

File durchsuchen

Verfasst: Mittwoch 15. Februar 2017, 16:48
von t3c404
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.

Re: File durchsuchen

Verfasst: Mittwoch 15. Februar 2017, 17:19
von BlackJack
Das klingt nach http://www.pythonchallenge.com/ Level 3 und wird üblicherweise mit dem `re`-Modul gelöst.

Re: File durchsuchen

Verfasst: Mittwoch 15. Februar 2017, 17:21
von Sirius3
@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.

Re: File durchsuchen

Verfasst: Mittwoch 15. Februar 2017, 17:28
von t3c404
@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.

Re: File durchsuchen

Verfasst: Donnerstag 16. Februar 2017, 10:35
von t3c404
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

Re: File durchsuchen

Verfasst: Donnerstag 16. Februar 2017, 10:42
von /me
1: [A-Z][A-Z][A-Z] kann man auch als [A-Z]{3} schreiben.
2: Es gibt auch re.findall.

Re: File durchsuchen

Verfasst: Donnerstag 16. Februar 2017, 10:49
von t3c404
/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 :)

Re: File durchsuchen

Verfasst: Donnerstag 16. Februar 2017, 11:48
von Sirius3
@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)

Re: File durchsuchen

Verfasst: Donnerstag 16. Februar 2017, 12:20
von Kebap
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.

Re: File durchsuchen

Verfasst: Montag 20. Februar 2017, 17:35
von t3c404
@ 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.