python 关于 遍历元组元素取 value的问题
编译器用的Sublime text3用的openpyxl插件
我定义了两个sheet后,把两个表当中的A列取出来比较:col1 = sheet1['A'] col2 = sheet2['A2']
我想把两个表中的元素比较就用了 for循环: for cell1 in col1:......
这个时候cell1.value 会报 tuple' object has no attribute 'value' 错 (直接输出cell1 会一个个的 显示 <Cell 'Sheet2'.A1>这类单个元素)
但我在下面 再套一个 forcell11 in cell1 的时候 cell11.value就没问题,
并且 cell11的value值的结果 就是我本来想 从cell1 上取的value值
这是什么原理?求解!~!!
通过你的表述判断逻辑应该是没错误的,所以问题应该出在语法上,本身col1应该就是由cell对象组成的一个元组,而你后面提到的的错误现象像是元组套着元组,我猜想最大的可能就是你在 col1 = sheet1['A']这句话后加加个了逗号变成了 col1 = sheet1['A'],这样就成了元组套元组。
如果不是这样你最好发一下源码,这样比较容易找到错误。 @Twilight6 txxcat 发表于 2020-6-5 04:23
通过你的表述判断逻辑应该是没错误的,所以问题应该出在语法上,本身col1应该就是由cell对象组成的一个元组 ...
谢谢解答,我找到原因了 , 但是还是没搞懂原理 !!! 具体情况如下 求解答~
我自己测试的简单 代码如下:
from openpyxl import load_workbook
wb = load_workbook(filename='新建excel测试表.xlsx')
st1 = wb['Sheet1']
st2 = wb['Sheet2']
col1 = st1['A2:A1428']
col2 = st2['A2:A17359']
for cell1 in col1:
for cell2 in col2:
if cell1.value == cell2.value :
print(cell2.value)
用st1['A'] 直接遍历取cell1.value没有问题, 但用st1['A2:A1428'] 遍历出来的 cell1就不行,
但我两种情况都print(cell1) 时, 控制台输出的结果都是一样的呀?? 是我看错了么??
如果我想取excelA列 中的某一段 来比较数值 应该怎么操作呢??
st1['A2:A1428']这种表达式获取的是表的二维数据,嵌套内的每一个元组是一行的数据,你用st1['A2:D8']就很容易看到结果了,第一个元素,也就是第一个元组将是由A2,B2,C2,D2组成的元组,而st1['A2:A1428']的第一个元素是A2一个元素组成的元组,知道原理了也很容易修改代码了:
from openpyxl import load_workbook
wb = load_workbook(filename='新建excel测试表.xlsx')
st1 = wb['Sheet1']
st2 = wb['Sheet2']
col1 = st1['A2:A1428']
col2 = st2['A2:A17359']
for cell1 in col1:
for cell2 in col2:
if cell1.value == cell2.value : #<---既然遍历出来的结果还是元组,加上就行了
print(cell2.value) #<---同上
不过,能跑是可以跑了,但是看你的数据量不小,估计那个速度嘛,估计有点酸爽。
页:
[1]