2016-03-20 15 views
0

Ich suche nach einer Möglichkeit, eine einfache Tabelle mit einem Satz von 3 Listen von Textdaten, sowie eine Liste von Headern zu erstellen. Hier ist der Überblick: Ich brauche 3 Spalten und eine unbestimmte Anzahl von Zeilen, abhängig von der Datenquelle. Ich möchte auch nichts importieren müssen, wenn es eine Möglichkeit gibt, es in Python normal zu machen. Alternativ könnte ich entweder Pandas, Matplotlib oder eine Kombination daraus verwenden. Hier ist mein Code:Python-Erstellen einer Tabelle aus nicht-numerischen Datenlisten

headers=["SCHEME","SERVER","PATH"] 
schemes=[] 
servers=[] 
paths=[] 
colLabels=['PATH','SERVER','SCHEME'] 
rowLabels=[] 
def homework2(filename): 
    """Opens a file, extracts URLs, parses them, and places them into table""" 
    filedata=open(filename,"r") 
    for url in filedata: 
     lineurl=SimpleURL(url) 
     schemes.append(lineurl.scheme()) 
     servers.append(lineurl.server()) 
     paths.append(lineurl.path()) 

Dieser Code liest eine bestimmte Textdatei, nimmt jede Zeile, und analysiert die URL in das Schema, Server und Pfad. Die drei Listen (und die Header) wie folgt aussehen:

['SCHEME', 'SERVER', 'PATH'] 
['http', 'https', 'https'] 
['google.com', 'twitter.com', 'github.com'] 
['/', '/pretend/me', '/asdflkjas/stuff'] 

Und ich suche diese Ausgabe zu erstellen, oder etwas ähnliches zu

SCHEME  SERVER   PATH 
http   https   https 
google.com twitter.com github.com 
/   /pretend/me /asdflkjas/stuff 

Ich habe versucht, einen Datenrahmen und die Tabelle mit() Funktion, aber ich konnte es nicht funktionieren.

+0

colLabels und rowLabels sind beide von einem meiner Versuche über links. Außerdem habe ich eine Klasse namens SimpleURLs, die es einfach macht, die Teile der URL zu trennen. –

+0

Es kann nicht mit einem Modul durchgeführt werden, das auf einem anderen Computer installiert werden müsste. –

Antwort

0

Code:

import pandas 

headers = ['SCHEME', 'SERVER', 'PATH'] 
scheme = ['http', 'https', 'https'] 
server = ['google.com', 'twitter.com', 'github.com'] 
path = ['/', '/pretend/me', '/asdflkjas/stuff'] 

data = {} 

for i, header in enumerate(headers): 
    data.update({header: [scheme[i], server[i], path[i]]}) 

df = pandas.DataFrame(data=data, columns=headers) 
print(df) 

Ausgang:

 SCHEME  SERVER    PATH 
0  http  https    https 
1 google.com twitter.com  github.com 
2   //pretend/me /asdflkjas/stuff 

Mit pandas 'DataFrame wir dies leicht tun können.

Verketten Sie einfach die Header und die Daten in ein Dictionary, wobei die Header die Schlüssel und die Listen scheme, und path die Werte sind.

Dann nur Plugin zu pandas 'DataFrame!

Hinweis:

Wenn Sie die gleiche Leistung in weniger Codezeilen erhalten möchten, können Sie die Zeilen umschreiben, die die Listen in einem Wörterbuch als weniger klar, aber ebenso funktionell, Wörterbuch Verständnis verketten wie folgt:

data = {header: [scheme[i], server[i], path[i]] for i, header in enumerate(headers)} 
0

Versuchen Sie diesen Code. column_width ist die maximale Länge der Elemente in jeder Spalte.

headers = ["SCHEME","SERVER","PATH"] 
schemes = ['http', 'https', 'https'] 
servers = ['google.com', 'twitter.com', 'github.com'] 
paths = ['/', '/pretend/me', '/asdflkjas/stuff'] 

def show_URL(headers, schemes, servers, paths): 
    column_width = [max(len(x) for x in row) for row in zip(headers, schemes, servers, paths)] 
    for item in [headers, schemes, servers, paths]: 
     str_printing = "" 
     for index, val in enumerate(item): 
      str_printing += "{:{}}".format(val, column_width[index] + 5) 
     print (str_printing) 

show_URL(headers, schemes, servers, paths) 

Ausgang:

SCHEME   SERVER   PATH     
http   https   https     
google.com  twitter.com  github.com   
/   /pretend/me  /asdflkjas/stuff 
Verwandte Themen