2016-03-20 24 views
0

3 metin listesi listesi ve başlıkların bir listesi verildiğinde basit bir tablo oluşturmanın bir yolunu arıyorum. İşte özet: Veri kaynağına bağlı olarak 3 sütuna ve belirsiz sayıda satıra ihtiyacım var. Ayrıca, Python'da normal olarak yapmanın bir yolu varsa, hiçbir şeyi ithal etmemeyi tercih ederim. Alternatif olarak, pandalar, matplotlib veya bunların bazı kombinasyonlarını kullanarak iyiyim.Python-Sayısal olmayan veri listelerinden tablo oluşturma

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()) 

Bu kod, belirli bir metin dosyasını okur her satırı alır ve düzeni, sunucu ve yoluna URL'yi ayrıştırır: İşte benim kodudur.

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

Ve sanırım bir DataFrame ve tabloyu kullanarak denedim

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

bu çıktıyı veya benzer bir şey yaratmak için arıyorum: Üç listeleri (ve başlıkları) şuna benzer() işlevi, ancak çalışmayı başaramadım.

+0

colLabels ve ROWLABELS hem benim girişimleri birinden kalan özelliklerdir. Ayrıca, URL'nin bölümlerini ayırmayı kolaylaştıran SimpleURLs adlı bir sınıfım var. –

+0

Başka bir bilgisayara yüklenmesi gereken bir modül kullanılarak yapılamaz. –

cevap

0

Kodu:

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) 

Çıktı:

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

DataFrame 'pandas ile kolayca yapabilirsiniz.

Yalnızca üstbilgileri ve verileri bir sözlük olarak birleştirin; üstbilgiler anahtarlar ve scheme, server listeleri ve path değerleridir.

Daha sonra sadece pandas 'DataFrame!

Not: birkaç kod satırına aynı çıktıyı almak istiyorsanız

, bir sözlüğüne listeleri bağlamak satırları yeniden yazabilirsiniz daha az net ama aynı derecede işlevsel, sözlük kavrama gibi Bunun gibi:

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

Bu kodu deneyin. column_width, her sütundaki öğelerin maksimum uzunluğudur.

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) 

çıkışı:

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