2016-10-17 3 views
0

私は、1行に8-12の値を持つcsvファイルを持っています。これは、カテゴリ、支払い方法、日付、金額などでデータを費やしています。ファイルをPythonにインポートしてリストに入れたいのですが、たとえば、ある月の特定のカテゴリにどれくらい費やされたかなどを簡単に見つけることができます。私が望むすべての属性を持った単一の購入のためのオブジェクトを作成し、次にこれらのオブジェクトのリストにcsvからインポートを行うための良い方法がありますか?CSVを各行をオブジェクトとしてインポートするにはどうすればよいですか?

+0

これを確認してください。http://stackoverflow.com/questions/1305532/convert-python-dict-to-object –

+0

あなたは各行をdict()として考えましたか? –

+0

@MartinBeckett私はdict()をやってみることを考えましたが、私は、各エントリの単一の変数を調べることをデフォルトにしておくと思いましたが、そうではありませんか? –

答えて

0

Pythonは独自のCSVリーダーをthe csv moduleに持っています。 あなたのCSVファイルを読み込むと、このようなオブジェクトにラインを変換するためにそれを使用することができます:

import csv 

# Read values from csv file. 

values = [] 
with open('file.csv', 'r') as csv_file: 
    # Replace the delimiter with the one used in your CSV file. 
    csv_reader = csv.reader(csv_file, delimiter=',') 
    for row_values in csv_reader: 
     # If a line in your CSV file looks like this: a,b,c 
     # Then row_values looks something like this: ['a', 'b', 'c'] 
     values.append(row_values) 

# Convert the list of lists (which represent the CSV values) to objects. 

column_names = ['first_column', 'second_column', 'third_column'] 
objects = [] 
for row_values in values: 
    objects.append({key: value for key, value in zip(column_names, row_values)}) 
# objects is now a list of dicts with one dict per line of the CSV file. 

# The dicts could e.g. be converted to objects with this: 
class MyObject: 
    def __init__(self, first_column, second_column, third_column): 
     self.first_column = first_column 
     self.second_column = second_column 
     self.third_column = third_column 
print(objects) 
objects = [MyObject(**object) for object in objects] 
# Alternative: 
alternative_objects = [] 
for object in objects: 
    new_object = object() 
    new_object.__dict__ = object 
    alternative_objects.append(new_object) 

CSVモジュールの詳細についてはPython 2.7または3.xドキュメントを参照してください。

+0

これはpython 3専用ですか? –

+0

いいえ.CSVモジュールはPython 2.7でも利用できます。しかし、私のコードはPython 3でテストされています。実際には少しエラーがあります。私はこれを修正するつもりです - ほら、分。 :) – mxscho

+0

申し訳ありません。 :)今はうまくいくはずです。 Python 2.7のドキュメントはこちらからも入手できます(これは同じですが)。https://docs.python.org/2/library/csv.html – mxscho

0

オブジェクトでできるトリッキー/ハックリの1つは、dictでプログラムで作成することです。次に例を示します。

In [1]: vals = {"one":1, "two":2} 
In [2]: class Csv():pass 

In [3]: c = Csv() 

In [4]: c.__dict__ = vals 

In [5]: c.one 
Out[5]: 1 

だから、そう、あなたが設定した属性を持つオブジェクトのようにそれを使用できるように、空のオブジェクトに挿入し、その後、辞書を作成し、空のオブジェクトを作成することができます。

関連する問題