Python で 二次元配列を print すると結果が省略されるが、全て表示させたい


割と量のある二次元配列に対して

[code]

    print data
    
[/code]

とした時に下記のように省略されるのですが、ファイルに書き出したいので全部出して欲しい時はどうすればよいですか？

[code]

    [[a,b,c ..., x,y,z]
    [a,b,c ..., x,y,z]
    ....,
    [a,b,c ..., x,y,z]
    [a,b,c ..., x,y,z]]
    
[/code]




`print <python-object>`
としたときにPythonのリストオブジェクトや辞書オブジェクトのプログラムコードのように出力されているのは、「たまたま」です。人間が見やすいように整形しているので、長い場合は途中で省略されます。

データを完全な状態でファイルに保存する、つまりシリアライズする方法はいくつかあります。このとき、どのようなフォーマットでファイルに書き出したいかによって実装方法は異なります。単に、人間が見るだけれあれば（再利用しないのであれば）、シリアライズをちゃんと考えるよりも楽に解決できそうです。

人間が見やすければOKな出力（画面の横幅はきっと広い）:

[code]

    lines = []
    for r in data:
        lines.append(', '.join(r))
    print '\n'.join(lines)
    
[/code]

print風味でprintを使って出力(Pythonのリストの文法と一致させる):

[code]

    lines = []
    for r in data:
        lines.append('[' + ', '.join(r) + ']')
    print '[' + ',\n'.join(lines) + ']'
    
[/code]

csvで出力(一般的に再利用しやすい方法):

[code]

    import csv
    with open('file.csv', 'wt') as f:
        writer = csv.writer(f)
        writer.writerows(data)
    
    # csv.reader を使えば読み込みが出来ます
    
[/code]

pickleで出力(Pythonで再利用しやすい方法):

[code]

    import pickle
    # write
    with open('file.p', 'wb') as f:
        pickle.dump(data, f)
    
    # read
    with open('file.p', 'rb') as f:
        d2 = pickle.load(f)
    
[/code]




`print <python-object>`
としたときにPythonのリストオブジェクトや辞書オブジェクトのプログラムコードのように出力されているのは、「たまたま」です。人間が見やすいように整形しているので、長い場合は途中で省略されます。

データを完全な状態でファイルに保存する、つまりシリアライズする方法はいくつかあります。このとき、どのようなフォーマットでファイルに書き出したいかによって実装方法は異なります。単に、人間が見るだけれあれば（再利用しないのであれば）、シリアライズをちゃんと考えるよりも楽に解決できそうです。

人間が見やすければOKな出力（画面の横幅はきっと広い）:

[code]

    lines = []
    for r in data:
        lines.append(', '.join(r))
    print '\n'.join(lines)
    
[/code]

print風味でprintを使って出力(Pythonのリストの文法と一致させる):

[code]

    lines = []
    for r in data:
        lines.append('[' + ', '.join(r) + ']')
    print '[' + ',\n'.join(lines) + ']'
    
[/code]

csvで出力(一般的に再利用しやすい方法):

[code]

    import csv
    with open('file.csv', 'wt') as f:
        writer = csv.writer(f)
        writer.writerows(data)
    
    # csv.reader を使えば読み込みが出来ます
    
[/code]

pickleで出力(Pythonで再利用しやすい方法):

[code]

    import pickle
    # write
    with open('file.p', 'wb') as f:
        pickle.dump(data, f)
    
    # read
    with open('file.p', 'rb') as f:
        d2 = pickle.load(f)
    
[/code]

