如何使用合并单元格读取Excel并将Excel保存到python中的dict
我有一个如图所示的表格,其中包含合并的单元格。 如何读取python中的Excel表格并保存在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
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文件请显示您的代码。如何读取单元格值?