2016-07-14 22 views
0

Ich möchte eine Python-Funktion, die bestimmte String-Elemente aus einer Textdatei mit bibliographischen Daten extrahiert. Die Datei enthält verschiedene Leitungen wie folgt aus:Zeichenkette extrahieren mit bibliographischen Daten aus einer TXT-Datei in ein Wörterbuch in Python

shakespeare, william: macbeth. novel, second edition, cambridge, 2005 

Jede Zeile von einem \n getrennt worden ist.

Wie kann ich extrahieren diese Zeilen in eine Struktur wie:

author : shakespeare, william 
title : macbeth 

usw.

+0

Was haben Sie versucht? Für Regex-bezogene Probleme habe ich immer eine Testseite wie [regex101.com] (http://www.regex101.com) verwendet und spiele mit einer Beispieleingabe, die ich zu verarbeiten versuche. Die Echtzeitergebnisse geben einen guten Eindruck davon, wie sie funktionieren. –

+0

das ist mein Code so weit: 'import re def meta_dict(): mit öffnen (" bib.txt "," rt ", encoding =" utf-8 ") als infile, öffnen (" bib.json " , "wt", encoding = "utf-8") als Ausgangsdatei: content = infile.read() line = content.splitlines() für single in line: Autor = re.search (r '^ [AZ ] [az] + \ s [AZ] [az] + |^[AZ] [a-ä] +, \ s [AZ] [az] + |^[AZ] [a-ü] + |^[AZ ]. [AZ]. \ S [AZ] [az] + |^[AZ] [az] * \ s [az] + |^[AZ] [az] + \ s [az] + \ s [AZ] [az] + ', single) print (author) ' – sepeko86

+0

Verschieben Sie die Zusätze durch Editieren in den Fragenkörper. Sie sind in dieser Form nicht lesbar. –

Antwort

1

Sie könnten so etwas tun. Jede Zeile hätte dann ein eigenes Wörterbuch.

d = {} 
s = "shakespeare, william: macbeth. novel, second edition, cambridge, 2005" 
data = s.split(".")[0].split(": ") 
d["author"] = data[0] 
d["title"] = data[1] 

print d 
#Output 
{'title': 'macbeth', 'author': 'shakespeare, william'} 
+0

Ok, so weit so gut, aber wie kann ich das für jede Zeile tun? Ich hätte gerne ein Modul mit zwei Funktionen. eine, um die Strings zu extrahieren, was ich mit deinem obigen Code herausgefunden habe. Die zweite Funktion sollte es für jede Zeile tun ... – sepeko86