2016-04-05 9 views
0

10行3列の.txtファイルがあり、すべてタブ区切りです。列には数字または?が含まれます。私はファイルの各行を解析したいのですが、どこに?列に関連する特定の機能を呼び出すことが判明しましたか?私は3つの機能を持っているので、もし?が列1に見つかった場合は、function_aが呼び出され、列2に見つかった場合はfunction_bが呼び出され、列3に見つかった場合はfunction_cが呼び出されます。ファイルを解析する

for line in fileinput.readlines(): 
    print(line.split("?")) 

をしかしと呼ばれる特定の機能を取得する方法を確認していない:

私はこれをしようとして見てきました。あなたは、その行の各列の値を得るためにあなたの区切り文字に分割する必要があります

+0

どのようにして列を定義しますか?タブ( '\ t')で分割し、返り値を分割する部分を繰り返し、その中に'? 'がある部分を見つけて関数を呼び出します。 –

答えて

0

for line in fileinput.readlines(): 
    a, b, c = line.split('\t')  # Variable unpacking; assumes each line has three columns 
    if a == '?': 
     function_a() 
    if b == '?': 
     function_b() 
    if c == '?': 
     function_c() 

それとも、嫌と醜いワンライナーのファンなら:

[(function_a, function_b, function_c)[line.split('\t').index('?')]() for line in fileinput.readlines()] 
0

この役に立った:

def column_a(line): 
    print 'first column in line', line 

def column_b(line): 
    print 'second column in line', line 

def column_c(line): 
    print 'third column in line', line 

funcs = [column_a, column_b, column_c] 

with open('input.txt') as fileinput: 
    for line in fileinput.readlines(): 
     line = line.strip().split('\t') 
     for i, item in enumerate(line): 
      if item == '?': 
       funcs[i](line)