2016-04-07 2 views
0

Ich habe eine große Textdatei, die ich in eine Zeichenfolge namens Daten gelesen habe.Wie kann ich Zeilen aus einer Textzeichenfolge mit bestimmten Kriterien in Python auswählen und sie zu einer Liste hinzufügen

Ich verwende CGI, um ein HTML5-Formular zu generieren.

Ich brauche die Zeilen auszuwählen, die formatiert sind, wie aus der Zeichenfolge folgt:

@CountyName: Heading

Hier ist ein Beispiel: @Algeria: Geographie

I Ich muss die Überschrift in eine Liste von Überschriften einfügen und sie eindeutig machen. Ich habe dies bereits mit einer Liste von Ländern gemacht, aber ich musste keine Kriterien verwenden, sondern stattdessen einen Zeilenbereich. Hier ist ein Schnipsel des Codes:

import cgi 
import cgitb; cgitb.enable() # for troubleshooting 

data = open('factbook.txt') 

countries = [] 
for index, text in enumerate(data): 
    if 54 <= index <= 344: 
     countries.append(text) 
countries = [x[:-1] for x in countries] 
countries = filter(None, countries) 

headings = [] 
# Here is where I need help 

Vielen Dank im Voraus!

Antwort

0

Ich bin nicht sicher, dass der Weg Sie gehen, wird Ihnen die richtigen Ländernamen bekommen, ich habe ein Beispiel für Liste, die Sie in der Frage angegeben haben:

In [73]: countries =[ "@Algeria:Geography", "@Greece:History", "@India:Culture", "@India:History"] 
In [74]: countries = [x[:-1] for x in countries] 
In [75]: countries 
Out[75]: ['@Algeria:Geograph', '@Greece:Histor', '@India:Cultur', '@India:Histor'] 

Hier sollten Sie dies tun, Länder zu bekommen

In [76]: countries = [x.split(':')[0][1:] for x in countries] 
In [77]: countries 
Out[77]: ['Algeria', 'Greece', 'India', 'India'] 

Und in ähnlicher Weise für die Überschriften:

In [88]: countries =[ "@Algeria:Geography", "@Greece:History", "@India:Culture", "@India:History"] 
In [89]: countries 
Out[89]: {' Culture', ' History', 'Geography', 'History'} 

für einzigartige list Verwenden Sie einen set

In [89]: countries =[ "@Algeria:Geography", "@Greece:History", "@India:Culture", "@India:History"] 
In [90]: countries = set([x.split(':')[1] for x in countries]) 
In [91]: countries 
Out[91]: {'Culture', 'Geography', 'History'} 
+0

Entschuldigung für die späte Antwort! Dies löst die Hälfte meines Problems. Ich habe bereits die Länder, die arbeiten, weil ich gerade einen Linie Bereich benutzt habe, um sie alle von der Textdatei zu ergreifen, die sie alle zusammen gruppiert sind. Mein Problem ist das Ergreifen aller Zeilen mit der Formatierung @Country: Heading, die über die gesamte Textdatei verteilt sind. – Noah

+0

@Noah In diesem Fall können Sie in "Regex" schauen, um die Strings in dem gewünschten Muster zu erhalten. Weitere Informationen finden Sie unter: https://docs.python.org/2/howto/regex.html – shaktimaan

+0

Perfekt, ich bin relativ neu in Python regulären Ausdruck Mustererkennung ist genau das, was ich brauche. Vielen Dank. – Noah

Verwandte Themen