Seite 1 von 3
Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 13:47
von YasinSidirva
Hallo alle Zusammen,
ich habe ein Projekt in dem ich aus einer DXF Datei den G-Code erstellen muss. Aus der resultierenden Textdatei muss ich Zeilen filtern in denen die Buchstaben G, M und F vorkommen. Bis jetzt habe ich es geschafft die Textdatei zu erstellen. Ich habe jedoch große Probleme die Textdatei nur mit den Zeilen in denen ein G, M und F vorkommt in Python zu öffnen. Also es soll die komplette Zeile in Python exportiert werden sobald ein G, M und F darin vorkommen.
Ich wäre euch sehr dankbar wenn ihr mir behilflich sein könntet.
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 13:55
von beertonic
Du kannst die Textdatei Zeilenweise einlesen und mit Regex prüfen ob die Buchstaben vorkommen.
https://docs.python.org/3/howto/regex.html
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 13:58
von noisefloor
Hallo,
was extrem hilfreich wäre:
1. Zeig mal den Python-Code, den du hast, um die .txt Datei zu öffnen und die Zeilen nach den Buchstaben zu durchsuchen.
2. Zeig mal ein paar Beispielzeilen aus der .txt-Datei. So 10-15 "typische" Zeilen sollten reichen.
Gruß, noisefloor
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 14:00
von noisefloor
Hallo,
Du kannst die Textdatei Zeilenweise einlesen und mit Regex prüfen ob die Buchstaben vorkommen.
Das sollte auch der `in`-Operator reichen.
Gruß, noisefloor
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 14:17
von YasinSidirva
noisefloor hat geschrieben:Hallo,
was extrem hilfreich wäre:
1. Zeig mal den Python-Code, den du hast, um die .txt Datei zu öffnen und die Zeilen nach den Buchstaben zu durchsuchen.
2. Zeig mal ein paar Beispielzeilen aus der .txt-Datei. So 10-15 "typische" Zeilen sollten reichen.
Gruß, noisefloor
Hallo noisefloor
1. Es gibt nur den Code mit dem die Textdatei in Python geöffnet wird einfach mit Open. Der Code fängt mit dem öffnen und filtern der Textdatei an.
2.
G0 Z 15.000
(*** LAYER: 0 ***)
T1 M6
S6000
(* SHAPE Nr: 0 *)
G0 X -14.980 Y -19.550
M3 M8
G0 Z 3.000
F150
G1 Z -1.500
F400
G1 X -14.980 Y 49.024
G1 X 55.773 Y 29.795
G1 X 55.773 Y -38.779
G1 X -14.980 Y -19.550
F150
G1 Z -3.000
F400
G1 X -14.980 Y 49.024
G1 X 55.773 Y 29.795
G1 X 55.773 Y -38.779
G1 X -14.980 Y -19.550
F150
G1 Z 3.000
G0 Z 15.000
M9 M5
F150
G1 Z 3.000
G0 Z 15.000
M9 M5
G0 X 0.000 Y 0.000
M2 (Program end)
--> Das ganze soll nach den Buchstaben G, M und F gefiltert werden und Zeilen in denen diese Buchstaben vorkommen sollen als ein Array in Python ausgewiesen werden.
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 14:26
von beertonic
@noisefloor: Ja das stimmt. Solange man zusammenhängende Zeichenketten sucht reicht 'in' völlig aus.
Entweder du liest die Zeilen einzeln ein, zählst mit und durchsuchst sie mit 'in' (z.B.: if 'c' in string), oder du liest den ganzen Text ein und durchsuchst ihn mit Regex.
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 14:29
von BlackJack
@YasinSidirva: Ob eine Teilzeichenkette in einer anderen vorkommt, kann man mit dem ``in``-Operator prüfen:
Code: Alles auswählen
In [1]: 'x' in 'Python'
Out[1]: False
In [2]: 'y' in 'Python'
Out[2]: True
Mit Hilfe einer Schleife oder eines Generatorausdrucks und der `any()`-Funktion lässt sich nun sehr leicht eine Funktion schreiben die eine Zeile testet.
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 14:39
von YasinSidirva
beertonic hat geschrieben:@noisefloor: Ja das stimmt. Solange man zusammenhängende Zeichenketten sucht reicht 'in' völlig aus.
Entweder du liest die Zeilen einzeln ein, zählst mit und durchsuchst sie mit 'in' (z.B.: if 'c' in string), oder du liest den ganzen Text ein und durchsuchst ihn mit Regex.
Könntest du Bitte einen Beispielcode zeigen wie das ganze aussehen könnte wenn ich nach den Buchstaben G0 und G1 filtere. Ich kenn mich mit Regex und 'in' nicht aus. Ich bin ein Anfänger in Python.
Viele Grüße
Yasin
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 14:45
von Alfons Mittelmeyer
@YasinSidirva: Was soll daran schwierig sein?
Code: Alles auswählen
with open('a.txt','r') as f:
for l in f:
if 'G' in l or 'M' in l or 'F' in l:
print(l)
Achtung die eingelesenen Zeilen haben am Ende noch ein Newline Zeichen '\n', eventuell mit Ausnahme der letzten. Ist die Datei mit Windows erstellt, dann hat sie evtl. noch ein Carriage Return '\r', denn In Windows enden die Zeilen mit '\r\n'.
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 15:28
von beertonic
Code: Alles auswählen
zeichenkette = 'bier'
for buchstabe in zeichenkette:
print(buchstabe)
ausgabe:
Zu Regex kannst du dir die Links mal angucken, aber ich würde an deiner Stelle lieber erst die Python Grundlagen lernen.
https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck
https://docs.python.org/2/library/re.html
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 18:42
von noisefloor
Hallo,
wenn es sicher / bekannt ist, dass der gesuchte Buchstabe immer an Zeilenanfang steht, dann geht das auch mit der `startswith()` Methode von Strings:
[codebox=pycon file=Unbenannt.txt]>>> what_to_look_for = ('G', 'M', 'F')
>>> with open('input.txt', 'r') as f:
... for line in f:
... if line.startswith(what_to_look_for):
... print(line)
...
G0 Z 15.000
G0 X -14.980 Y -19.550
M3 M8
G0 Z 3.000
F150
[/code]
Gruß, noisefloor
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 19:28
von Alfons Mittelmeyer
beertonic hat geschrieben:Zu Regex kannst du dir die Links mal angucken, aber ich würde an deiner Stelle lieber erst die Python Grundlagen lernen.
Regex zu benützen ist wohl hier nicht angebracht. Regex nimmt man zum Parsen komplizierter Zeichenfolgen her. Dem User zu raten, sich zuerst mit Regex zu beschäftigen, trägt nicht zur Problemlösung bei.
Das wird wohl mit Regex weder einfacher noch schneller:
if 'G' in l or 'M' in l or 'F' in l:
Wenn Du anderer Meinung bist, dann zeige es doch. Formuliere das doch mal mit Regex. Und wenn Du meinst, wenn es zwar nicht einfacher wäre, dafür aber schneler, dann miss das bitte nach.
Zuerst alle Python Grundlagen zu studieren ist ach nicht der richtige Rat.
Man sollte kennen:
open
Man sollte gehört haben:
with open
Und wenn man googled mit "python with open, stößt man darauf:
http://stackoverflow.com/questions/1155 ... -in-python
Damit kann man die einzelnen Zeilen bekommen. Es ginge natürlich auch mit
open,
readline. und
close.
Und wissen sollte man auch um:
in
Wenn man allerding
in nicht kennt, dann sich zuerst mt Python Grundlagen befassen.
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 19:49
von Alfons Mittelmeyer
noisefloor hat geschrieben:Hallo,wenn es sicher / bekannt ist, dass der gesuchte Buchstabe immer an Zeilenanfang steht, dann geht das auch mit der `startswith()` Methode von Strings
Ja gehen tut Vieles. Aber
startswith muss man erst kennen. Dann ist es eine Stringfunktion und mann muss wissen, dass man auch ein Tuple übergeben kann. Das ist beschrieben hier:
https://docs.python.org/2/library/stdty ... startswith
Wenn es aber nur um einen Buchstaben geht, bedarf es weder einer Stringfunktion, noch einer Funktion, die dem User ziemlich unbekannt sein dürfte.
Simpel und schnell wäre da:
if line[0] in 'GMF':
Und das sind Grundlagen, die man kennen sollte, anstatt nach etwas Komplizierterem Ausschau zu halten.
Ach so, Python Grundlagen braucht man auch fast gar keine, um Programme zu schreiben. Wer
in nicht kennt, kann es ja auch so machen:
statt:
if line[0] in 'GMF':
geht auch:
if is_in(line[0],'GMF'):
Wenn man dazu definiert hat:
Code: Alles auswählen
def is_in(element,kind_of_list):
length = len(kind_of_list)
index = 0
while index < length:
if kind_of_list[index]==element:
return True
index += 1
return False
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 20:35
von noisefloor
Hallo,
Python Grundlagen braucht man auch fast gar keine, um Programme zu schreiben.
Hervorragende Einstellung. Nicht. Erklärt aber andererseits den Qualität des Codes, den du hier im Forum hier so postest.
Gruß, noisefloor
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 20:55
von Alfons Mittelmeyer
noisefloor hat geschrieben:Hallo,
Python Grundlagen braucht man auch fast gar keine, um Programme zu schreiben.
Hervorragende Einstellung. Nicht. Erklärt aber andererseits den Qualität des Codes, den du hier im Forum hier so postest.
Gruß, noisefloor
Was willst Du damit sagen. Das ist Code Qualität:
if line[0] in 'GMF':
Eine
is_in Funktion anstelle von
in sollte man nicht schreiben, sondern grundlegende Python Funktionalität kennen und benützen.
Allerdings Qualität hätte so eine
is_in Funktion schon. Man würde sie etwa in C benützen, wo es
in nicht gibt. In Python allerdings unnötig und laufzeitverlangsamend. Man sollte das folglich nicht tun. Aber wer programmieren kann, aber bisher noch nicht in Python, könnte Programmierprobleme auch auf in Python unnötige Weise lösen.
Wenn jemand also nach einer Problemlösung fragt, die auch ohne besondere Python Kenntnisse machbar ist, dann hapert es wohl an allgemeinen Programmierkenntnissen.
Ach so, genausowenig finde ich
line.startswith gut, wenn es nur um einen Buchstaben geht. Für mich wäre das vergleichbar mit so einer
is_in Fuinktion.
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 21:08
von kbr
Alfons Mittelmeyer hat geschrieben:Aber wer programmieren kann, aber bisher noch nicht in Python, könnte Programmierprobleme auch auf in Python unnötige Weise lösen.
Und Du zeigst dann, wie dies geht ...
'is_in' lässt sich übrigens besser schreiben als
Code: Alles auswählen
def is_in(value, iterable):
for item in iterable:
if value == item:
return True
return False
Was aber nicht erforderlich ist, denn es gibt ja 'in'.
Deine umständliche Variante ist allerdings besser geeignet, um Python-Anfänger auf die falsche Fährte zu locken.
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 21:24
von Alfons Mittelmeyer
kbr hat geschrieben:Alfons Mittelmeyer hat geschrieben:
'is_in' lässt sich übrigens besser schreiben als
Code: Alles auswählen
def is_in(value, iterable):
for item in iterable:
if value == item:
return True
return False
Was aber nicht erforderlich ist, denn es gibt ja 'in'.
Die von mir vorgestellte Funktion würde evtl. jemand schreiben der
in nicht kennt. Aber Deine Variante macht da keinen Sinn, denn Du benützt in Zeile 2
in
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 21:30
von kbr
Wahrscheinlich hast Du auch noch Vorschläge, wie sich if, return und def vermeiden lassen ...
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 21:43
von Alfons Mittelmeyer
kbr hat geschrieben:Wahrscheinlich hast Du auch noch Vorschläge, wie sich if, return und def vermeiden lassen ...
Nö, Bedingungen wie
if, else, Funktionen
def und
return sowie Schleifen
while,
break,
continue gehören zu jeder Programmiersprache. Vermeidbar wäre aber
for.
Man könnte höchstens einen Interpreter für eine andere Programmiersprache machen und diese Schlüsselworte umbenenen, vielleicht in wenn, sonst, solange_als, aufhören, weitermachen, definiere, zurückspringen oder abhauen.
Ich hatte mal in Python ein FORTH geschrieben, da konnte man auch if, else usw, beliebig umbenennen. Aber in Python Schlüsselworte umbenennen geht wohl nicht?
Zumindest wäre das nicht einfach:
http://stackoverflow.com/questions/3647 ... r-keywords
Sinnvollerweise sollte man die Schlüsselworte nicht umbendennen sondern ein
alias anlegen. Wie macht man das in Python?
Und sollte das alias von if, dann eine Kopie von if sein, oder auf das urprünliche if verweisen?
Re: Suche nach bestimmten Buchstaben in einer Textdatei
Verfasst: Donnerstag 11. Mai 2017, 22:09
von DasIch
Alfons Mittelmeyer hat geschrieben:kbr hat geschrieben:Wahrscheinlich hast Du auch noch Vorschläge, wie sich if, return und def vermeiden lassen ...
Nö, Bedingungen wie
if, else, Funktionen
def und
return sowie Schleifen
while,
break,
continue gehören zu jeder Programmiersprache.
Nein, tun sie nicht. Lambda Calculus kommt ohne Bedingungen und Schleifen aus. Das spiegelt sich in der Praxis auch durchaus in funktionalen Programmiersprachen wieder. Assembler kommt ohne Funktionen und Schleifen aus, findet ebenfalls durchaus praktische Anwendung.