【问题标题】:Python xlrd iteration over excel spreadsheet leaves out cell valuesexcel电子表格上的Python xlrd迭代遗漏了单元格值
【发布时间】:2015-03-10 17:58:15
【问题描述】:

在这里需要一些帮助,

这是我的代码:

   import xlutils
   import xlrd
   import os
   import sys
   datafile = r'C:\\someexcelfileediting.xlsx'
   workbook = xlrd.open_workbook(datafile)
   stone = workbook.sheet_by_name(input('What is the name of the sheet you are trying to reference?  ').upper())
   paper = workbook.sheet_by_name(input('what sheet would you like to check?  ').upper())
   def check_Base():
   set2 = set()
   for row in range (0, paper.nrows):    
       for col in range(0, paper.ncols):       
           set2.add(paper.cell_value(row, col))
   print (len(set2))
   print (set2)
check_Base()

我最终得到的是它正在迭代的 excel 表的 91 个值中的 79 个,我不明白为什么它不包括文件中的 12 个条目。数据似乎没有一种模式,它忽略了来自不同行和列的随机值。任何帮助,将不胜感激。

谢谢, 会

【问题讨论】:

  • 澄清一点:你明白setlist 之间的区别吗?
  • 您确定set 是合适的数据结构吗?一个集合将是无序的并消除重复。
  • 我想使用 set 所以我可以使用 "set.difference"set3 = set1-set2" 来查找不在一个字符串和另一个字符串,然后将这些值打印到不同的字符串表
  • @JoeHolloway 谢谢我没有意识到将其保存为一组会删除重复项,并且我的一个列具有相同的值,因此它删除了所有 12 个列,这就是为什么我的总数是关闭的。谢谢

标签: python iteration xlrd xlutils


【解决方案1】:

set 将为您提供唯一值的无序集合。如果您的电子表格中有重复的单元格,则只会将第一个单元格添加到集合中,其余的将被丢弃。

根据您的 cmets,听起来您只是在进行一些调试,但如果您确实需要计算已解压的单元格,一种选择是先将 append 它们转换为列表,然后将其转换以后来一套。

mylist = []
for row in range (0, paper.nrows):    
    for col in range(0, paper.ncols):       
        mylist.append(paper.cell_value(row, col))

print len(mylist) # 91

myset = set(mylist)

print len(myset) # 79

【讨论】:

    【解决方案2】:

    我想说,与其创建一个列表然后将其转换为一个集合,不如先初始化一个空集合并继续向其中添加元素。它会自动处理设置的功能。这将提高性能。

    myset= set()
    for row in range (0, paper.nrows):    
        for col in range(0, paper.ncols):       
            myset.add(paper.cell_value(row, col))
    
    print len(myset) # 79
    

    【讨论】:

    • 您的陈述是正确的,但我认为您不理解所提出的问题。您的“解决方案”与问题中显示的代码相同(具有不同的变量名称)。我的回答只是为了展示列表和集合之间的计数差异,而不是作为在所需数据结构时如何生成集合的建议。提问者已经这样做了,但对结果感到困惑。
    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多