2013-01-09 19 views
6

私はタブで区切られたファイルを読むのに使います。ファイルには3つのカラムがありますが、カラムヘッダのみを印刷すると最初のカラムは無視されます。最初の列すぎるpythonデリミタを使ってタブで区切られたファイルを読む

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

出力:[ 'SESSION_IDの\ tの'、 '\ tevent_id_concat']は

最初の列名は、それが上記アレイに印刷じゃないidある

EDIT

プリントLが得

EDIT以下1:

'id\tsession_id\tevent_id_concat\r\n' 

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

正常に動作するはずです。 'print'文の前に' print l'を追加して出力を表示できますか? P.S.また、 '.readlines()'の必要はありません。いつものように。 –

+0

私はプリントlを与えました – Rajeev

+0

実際に 'print repr(l)'の出力を表示できますか? – poke

答えて

6

それは動作するはずですが、 'で' を使用した方が良いです:それはおそらく、その後ない場合

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

あなたのファイルは必要なフォーマットを持っていません。

+0

しかし、どのようにして単語を削除することができますか? –

+0

多くの可能性のあるエッジケースを扱うので、モジュールベースのアプローチが好ましいはずです –

14

また、csvモジュールを使用することをお勧めします。使いやすく、CSVのようなフォーマット(タブ/スペース/別のものが区切られたもの)で保存されたテーブルのような構造を読みたい場合に最適です。

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

すべての行は、あなたが、インデックスベースの操作を行いたい場合に非常に便利ですリストです:

module documentationはもっともシンプルな使用法があると述べられている良い例を示します。

区切り文字を変更したい場合は、このためのキーワードがありますが、キーワードを使用して定義することもできる事前定義された方言には問題はありません。

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

私は、これはあなたの問題を解決するかどうかわからないが、エラーが残る場合精緻化モジュールを使用すると、何かがあなたのファイルではなく、あなたのコードが間違っていることを保証します。

+0

'reader = csv.reader(f、dialect = 'excel'、delimiter = '\ t')'を実行する必要はありません。 'excel-tab'フォーマットが定義されているので、 'excel'フォーマットを調整するのではなく、単にそれを使うことができます: 'reader = csv.reader(f、dialect = 'excel-tab')' –

関連する問題