Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用合并单元格读取Excel并将Excel保存到python中的dict_Python_Excel_Merge - Fatal编程技术网

如何使用合并单元格读取Excel并将Excel保存到python中的dict

如何使用合并单元格读取Excel并将Excel保存到python中的dict,python,excel,merge,Python,Excel,Merge,我有一个如图所示的表格,其中包含合并的单元格。 如何读取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]]} 不确定excel文档,但您可以使用该模块读取CSV格式的文件。从文档中: >>> import csv

我有一个如图所示的表格,其中包含合并的单元格。 如何读取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]]}

不确定excel文档,但您可以使用该模块读取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')]})
defaultdict({
‘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')]]

不确定excel文档,但您可以使用该模块读取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')]})
defaultdict({
‘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')]]

对于合并单元格,我总是得到“空”的结果。您的确切问题是什么?到目前为止您尝试了什么?您使用什么模块读取excel文件:
xlrd
openpyxl
?@alecxe xlrd读取excel文件请显示您的代码。如何读取单元格值?对于合并的单元格,我总是得到“空”的结果。您的确切问题是什么?到目前为止您尝试了什么?您使用什么模块读取excel文件:
xlrd
openpyxl
?@alecxe xlrd读取excel文件请显示您的代码。如何读取单元格值?