3

私はPythonの初心者で、Pythonのcsvファイルからタプルを含むリストを作成して保存するのに苦労しています。

今のところ取得したコードは次のとおりです。

def load_file(filename):
    fp = open(filename, 'Ur')
    data_list = []
    for line in fp:
        data_list.append(line.strip().split(','))
    fp.close()
    return data_list

それからファイルを保存したい

def save_file(filename, data_list):
    fp = open(filename, 'w')
    for line in data_list:
        fp.write(','.join(line) + '\n')
    fp.close()

残念ながら、私のコードはタプルのリストではなくリストのリストを返します... csvモジュールを使用せずに複数のタプルを含む1つのリストを作成する方法はありますか?

4

3 に答える 3

8

splitリストを返します。タプルが必要な場合は、タプルに変換します。

    data_list.append(tuple(line.strip().split(',')))

csvモジュールをご利用ください。

于 2013-03-25T13:30:34.360 に答える
7

最初の質問:リストのリストが悪いのはなぜですか?「ダックタイピング」という意味では、これで問題ないはずなので、もう一度考えてみてください。

タプルのリストが本当に必要な場合は、小さな変更のみが必要です。

行を変更します

        data_list.append(line.strip().split(','))

        data_list.append(tuple(line.strip().split(',')))

それでおしまい。

カスタムコードを削除したい場合(コードが少ないほどコードが優れている)、csvモジュールに固執することができます。できるだけ多くのライブラリメソッドを使用することを強くお勧めします。

いくつかの高度なPython機能を披露するには:load_file-methodも次のようになります。

def load_file(filename):
    with open(filename, 'Ur') as fp:
        data_list = [tuple(line.strip().split(",") for line in fp]

ここではリスト内包表記を使用します。これは非常に簡潔で理解しやすいものです。

さらに、withコード内で例外が発生した場合でも、ファイルポインタを閉じる-statementを使用します。withファイルなどの外部リソースを使用する場合は、常に使用してください。

于 2013-03-25T13:33:26.103 に答える
1

「tuple()」をでラップするだけline.strip().split(',')で、タプルのリストが表示されます。この実行可能な要点で実際に動作しているのを見ることができます。

于 2013-03-25T13:37:18.433 に答える