1

セルが結合された図のようなテーブルがあります。PythonでExcelテーブルを読み取り、dictに保存するにはどうすればよいですか?

table_dict={S1:[a,b,c,d],
            S2:[[a1,a2,a3],[b1,b2,b3],[d1,d2,d3]],
            S3:[[a4,a5,a6][b4,b5,b6][c4,c5,c6][d4,d5,d6]]}

セルを結合した表

4

1 に答える 1

1

エクセル文書はわかりませんが、csvモジュールで CSV 形式のファイルを読み込むことができます。ドキュメントから:

>>> import csv
>>> with open('eggs.csv', 'rb') as csvfile:
...     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
...     for row in spamreader:
...         print ', '.join(row)
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam

LibreOfficeから出力されたファイルでテストすると(このマシンにはExcelがありません)、結合されたセルは分割され、空白のセルが埋め込まれます(最初に結合されていないかのように)。したがって、次のようになります。

[['S1', 'S2', '', '', 'S3', '', ''],
 ['a', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6'],
 ['b', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6'],
 ... etc]

次に、これを目的の形式に変換するスクリプトが必要です。

import csv
from collections import defaultdict

with open('file.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile)
    # rotate the data so we have a list of columns, not a list of rows
    # note this is not very robust
    data = zip(*reader)
    results = defaultdict(list)
    last = None
    for col in data:
        # pull the column name off the front
        name = col[0]
        cells = col[1:]
        # use the previous column name if blank
        if name is '':
            name = last
        # check for missing column name at start
        if name is None:
            print 'invalid data:', col
            continue
        results[name].append(cells)
        last = name
    print results

収量:

defaultdict(<type 'list'>, {
    'S3': [('a4', 'b4', 'c4', 'd4'), ('a5', 'b5', 'c5', 'd5'), ('a6', 'b6', 'c6', 'd6')], 
    'S2': [('a1', 'b1', 'c1', 'd1'), ('a2', 'b2', 'c2', 'd2'), ('a3', 'b3', 'c3', 'd3')], 
    'S1': [('a', 'b', 'c', 'd')]})
于 2013-07-17T12:25:27.563 に答える