私は初心者のpythonユーザーです。python関数を満たすために必要なオブジェクト形式でcsvからpythonにデータを取得するのに問題があります。(csvからデータを取り込むのではなく)Pythonでデータを手動で作成した場合、次のコードが機能します。
class Student(object):
pass
john = Student()
#score tuple
john.score = (85.0, 42.0/2.0)
bob = Student()
bob.score = (45.0, 19.0/2.0)
john.rank = 1
bob.rank = 2
ExternalCode.AdjustStudents([john, bob])
ただし、自動的に機能する必要があり、何千もの更新が行われるため、毎回手動でデータを入力する必要はありません。したがって、csvからデータを取り込むことができる必要があります。
csvファイル形式は次のとおりです:john、85、21、1 bob、45、9.5、2
学生オブジェクトには、スコア属性(タプルとしての列2と3)とランク属性(列4)があります。必要なオブジェクト形式は、上記の手動コードで生成されたものと同じです。
手動コードによって生成される必要な形式の例は、手動コードの後に次の印刷を行う場合です。
print(" John: score1={0[0]:.3f} score2={0[1]:.3f}".format(john.skill))
私はこの結果を得る:
ジョン:スコア1 = 25.000スコア2 = 8.333
乾杯、
スティーブ
私があなたを正しく理解しているなら、あなたは変数を動的に作成する方法を尋ねています。globals()
dictを操作して新しい変数を作成することはお勧めできません。むしろ、リストまたは辞書を使用してcsvデータを保存する必要があります。
リストが必要なようですので、次のようにします。
student_list
以下の例)。csv.reader
。Student
インスタンスを作成し、名前と番号を渡します。student_list
。したがって、csvファイルがそのようになっている場合は、
name,score1,score2,rank
john,85,21,1
sarah,72,19,2
bob,45,19,3
次のコードを試してください。
import csv
class Student:
def __init__(self, name, score, rank):
self.name = name
self.score = score
self.rank = rank
student_list = []
with open('temp.csv', newline='') as csv_file:
reader = csv.reader(csv_file)
next(reader, None) # Skip the header.
# Unpack the row directly in the head of the for loop.
for name, score1, score2, rank in reader:
# Convert the numbers to floats.
score1 = float(score1)
score2 = float(score2)
rank = float(rank)
# Now create the Student instance and append it to the list.
student_list.append(Student(name, (score1, score2), rank))
# Then do something with the student_list.
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加