2017-08-10 16 views
0

txtファイルからデータをインポートするときに、タイトルのように自分のコードが繰り返されるのを避けるためにいくつか問題があります。私の質問は、関数をループするスマートな方法がある場合です。私はまだ一般的には非常にPythonに新しいので、私はこの分野で十分な知識がありません。txtファイルから情報をソートする際のコードを繰り返します。

私が使用しているコードは、だから、コードが「fundamenta_list」から読んでいるとき、どのように私は、コードの重複を防ぐために変更できますか、次の

with open("fundamenta.txt") as fundamenta: 
    fundamenta_list = [] 
    for row in fundamenta: 
     info_1 = row.strip() 
     fundamenta_list.append(info_1) 

namerow_1 = fundamenta_list[1] 
sol_1 = fundamenta_list[2] 
pe_1 = fundamenta_list[3] 
ps_1 = fundamenta_list[4] 
namerow_2 = fundamenta_list[5] 
sol_2 = fundamenta_list[6] 
pe_2 = fundamenta_list[7] 
ps_2 = fundamenta_list[8] 
namerow_3 = fundamenta_list[9] 
sol_3 = fundamenta_list[10] 
pe_3 = fundamenta_list[11] 
ps_3 = fundamenta_list[12] 

のですか?

+0

これらの変数にすべての情報を挿入する必要があるのはなぜですか?あなたは 'fundamenta_list'から直接データにアクセスすることができます。 – Moyote

+0

私は変数からオブジェクトを作成しています。その数は3つですが、将来的にはリストが大きくなり、より標準化されたアプローチが必要だと私は考えています! – Jurkka

+0

"私の質問は、関数をループするスマートな方法があれば"という意味ではわかりません。サンプルコードには何も機能はありません。私の答えはあなたを助けてくれましたか? – Moyote

答えて

0

それはあなたの入力ファイルは、4行のブロックとして、それぞれを記録しているように私には見えますしたがって、namerow,solpepsとなり、これらの4つのフィールドを使用するオブジェクトが作成されます。あなたのような何かを行うことができ、あなたのオブジェクトがMyObjectと呼ばれていると仮定:

with open("test.data") as f: 
    objects = [] 
    while f: 
     try: 
      (namerow, sol, pe, ps) = next(f).strip(), next(f).strip(), next(f).strip(), next(f).strip() 
      objects.append(MyObject(namerow, sol, pe, ps)) 
     except: 
      break 

、あなたがobjects[0]としてあなたのオブジェクトにアクセスすることができますなど

は、あなたもMoyoteの中のようなオブジェクトのリストを返す関数にそれを作ることができます回答。

0

質問を正しく理解していれば、コードから機能を作り、同じコードを繰り返さないようにすることができます。あなたがこれを行うことができます

def read_file_and_save_to_list(file_name): 
    with open(file_name) as f: 
    list_to_return = [] 
    for row in f: 
     list_to_return.append(row.strip()) 
    return list_to_return 

その後、その後、あなたは次のように関数を呼び出すことができます。

fundamenta_list = read_file_and_save_to_list("fundamenta.txt") 
+0

これは有望そうですね。私が不明な場合は申し訳ありません。私はこれをすぐに試してみましょう! – Jurkka

+0

@Jurkka、助けましたか? – Moyote

+0

コードで改良したかったのは、 "namerow_1"などの変数でした。そのため、コードは無限に長いtxtファイルを読み込み、同じパターンに従ってオブジェクトを作成することができます。だから私はそれを修正するためにいくつかの種類のループが必要だと思う、それは私が持っているより大きな問題です。あなたはそれをどのように修正するか考えていますか? – Jurkka

関連する問題