2016-05-31 8 views
2

私はPythonの初心者です。ファイルの各行をカンマ','で区切った値で読み取ろうとしています。この行のように:変数のパラメータは?

435,567,897,905,6,56,22,90. 

私の既存のコード

#!/usr/bin/python 

class Line(): 
    def __init__(self, val1, val2, val3, val4, val5, val6, val7, val8): 
     self.val1 = val1 
     self.val2 = val2 
     self.val3 = val3 
     self.val4 = val4 
     self.val5 = val5 
     self.val6 = val6 
     self.val7 = val7 
     self.val8 = val8 

    def display(self): 
     print("CPU:",self.val1) 

file = open("/Users/user/Desktop/data.txt", 'r') 

for line in file: 
line = line.split(",") 
li = str(line)[1:-1] 
lin = Line(li) 
lin.display() 

file.close() 

data.txtは、以下のようなものです。

435,567,897,905,6,56,22,90 
435,567,897,905,6,56,22,90 
435,567,897,905,6,56,22,90 
435,567,897,905,6,56,22,90 
435,567,897,905,6,56,22,90 
435,567,897,905,6,56,22,90 
435,567,897,905,6,56,22,90 
435,567,897,905,6,56,22,90 
435,567,897,905,6,56,22,90 

CPU:valueのように最初の値を印刷する方法を教えてください。

答えて

0

そうのように、*演算子を使用して、(この場合はLine.__init__で)関数のすべての引数にリストの値を解凍するには:

lin = Line(*li) 
1

あなたはそれぞれの項目のそれぞれを渡す必要がありますlineからLineのコンストラクタ。それを行う1つの方法は、次のように書くことです:

li = Line(line[0], line[1], line[2], line[3], line[4], line[5], line[6], line[7])) 

しかし、それは多くの書き込みです。 Pythonにはショートカットがあります:

li = Line(*line) 

これは同じことを行います。

あなたはとにかくstr(line)[1:-1] ...

を使用していた理由は、これはあなたのコードも自動的にループした後、ファイルを閉じますwithステートメントを使用し、以下のように見えるように書き直すことができることを意味わかりません。

class Line(): 
    def __init__(self, val1, val2, val3, val4, val5, val6, val7, val8): 
     self.val1 = val1 
     self.val2 = val2 
     self.val3 = val3 
     self.val4 = val4 
     self.val5 = val5 
     self.val6 = val6 
     self.val7 = val7 
     self.val8 = val8 

    def display(self): 
     print("CPU:", self.val1) 

with open("/Users/user/Desktop/data.txt", 'r') as file 
    for line in file: 
     line = line.split(",") 
     lin = Line(*line) 
     lin.display() 
+0

ありがとうございます。チャームのように働いています。 – viswa

+2

よろしくお願いいたします。 [私の質問に誰かが答えたときに何をすべきですか?_(http://stackoverflow.com/help/someone-answers) – martineau

関連する問題