winds2333 发表于 2020-6-5 00:41:06

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值

这是什么原理?求解!~!!





txxcat 发表于 2020-6-5 04:23:27

通过你的表述判断逻辑应该是没错误的,所以问题应该出在语法上,本身col1应该就是由cell对象组成的一个元组,而你后面提到的的错误现象像是元组套着元组,我猜想最大的可能就是你在 col1 = sheet1['A']这句话后加加个了逗号变成了 col1 = sheet1['A'],这样就成了元组套元组。
如果不是这样你最好发一下源码,这样比较容易找到错误。

小甲鱼的铁粉 发表于 2020-6-5 07:17:36

@Twilight6

winds2333 发表于 2020-6-5 22:20:00

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列 中的某一段 来比较数值 应该怎么操作呢??





txxcat 发表于 2020-6-5 23:07:01

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]
查看完整版本: python 关于 遍历元组元素取 value的问题