2013-01-09 10 views
6

Używam następujących poleceń do odczytu pliku oddzielonego tabulatorami. W pliku są trzy kolumny, ale pierwsza kolumna jest ignorowana, gdy drukuję tylko nagłówek kolumny.jak mogę dołączyć pierwsza kolumna zaPython czyta plik oddzielony tabulator przy użyciu ogranicznika

f = open("/tmp/data.txt") 
for l in f.readlines(): 
    print l.strip().split("\t") 
    break 
    f.close() 

wyjściowe: [ 'session_id \ t', '\ tevent_id_concat']

pierwsza nazwa kolumny jest id gdzie nie y drukowane w powyższej tablicy

EDIT

drukuj l daje następujące

EDIT 1:

'id\tsession_id\tevent_id_concat\r\n' 

    Output: ['id\t', '\tevent_id_concat'] 
+0

Powinien działać. Czy możesz dodać 'print l' przed twoją instrukcją' print' i pokazać wyjście? P.S. Ponadto, nie ma potrzeby używania '.readlines()', tak jak zawsze. –

+0

dałem wydruk l – Rajeev

+0

Czy rzeczywiście możesz wyświetlić wyjście 'print repr (l)'? – poke

Odpowiedz

6

To powinno działać, ale lepiej jest używać 'z':

with open('/tmp/data.txt') as f: 
    for l in f: 
     print l.strip().split("\t") 

jeśli nie to prawdopodobnie Twój plik nie ma wymaganego formatu.

+0

Ale w jaki sposób "rozbierać" można odciąć słowo? –

+0

Podejście modułowe powinno być preferowane, ponieważ obsługuje wiele możliwych przypadków brzegowych. –

14

Proponuję również użyć modułu csv. Jest łatwy w użyciu i najlepiej pasuje, jeśli chcesz odczytywać w tabeli struktury przechowywane w formacie podobnym do CSV (tab/space/coś innego ograniczonego).

module documentation daje dobre przykłady, gdzie najprostsze wykorzystanie zamieszczonego być:

import csv 
with open('/tmp/data.txt', 'r') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     print row 

Każdy wiersz jest lista, która jest bardzo przydatna, jeśli chcesz zrobić manipulacje oparte indeksowych.

Jeśli chcesz zmienić separator, jest to słowo kluczowe, ale często jestem w porządku z predefiniowanymi dialektami, które można również zdefiniować za pomocą słowa kluczowego.

import csv 
with open('/tmp/data.txt', 'r') as f: 
    reader = csv.reader(f, dialect='excel', delimiter='\t') 
    for row in reader: 
     print row 

Nie jestem pewien, czy to będzie rozwiązać swoje problemy, ale korzystanie z opracowanych modułów zapewni, że coś jest nie tak z plikiem, a nie kod błędu, jeśli pozostanie.

+0

Nie ma potrzeby robienia 'reader = csv.reader (f, dialect = 'excel', delimiter = '\ t')', jest został zdefiniowany format "excel-tab", więc możesz po prostu użyć tego zamiast ulepszać format "excel": 'reader = csv.reader (f, dialect = 'excel-tab')' –

Powiązane problemy