xlrd: 如何读取多个xl文件的工作表并存入一个列表/数组?(更好的方法?)

2 投票
2 回答
4277 浏览
提问于 2025-04-16 18:54

我对xlrd/xlwt的经验不多,但我已经成功访问了我想要收集数据的一个文件。我想从目录中的所有文件收集数据,并把它们放到一个表格里。我在想,如果能把所有数据存储在一个数组或列表中,那输出成csv文件就会很简单。如果这工作量太大,有没有简单的方法可以做到?否则,我正在用Idle来尝试一些想法,到目前为止我得到了这个:

>>> import xlrd, xlwt
>>> book = xlrd.open_workbook('c:\excelTry\Papineau.csv.xls')
>>> book.sheet_names()
[u'Charge Codes', u'Month']
>>> sh = book.sheet_by_index(1)
>>> #produces:
>>> sh.book
<xlrd.Book object at 0x01213BF0>
>>> for x in range(0, 10):
        sh.row_values(x)
[u'William Papineau', u'Pay Period 11', '', '', u' ', u' ', '', '', '', u'Weekly Total', '', '', u' ', '', '', '', '', u'Weekly Total', u'Biweekly', u'Percent of Effort']
[u'Index Number', u'Index Description', 40678.0, 40679.0, 40680.0, 40681.0, 40682.0, 40683.0, 40684.0, '', 40685.0, 40686.0, 40687.0, 40688.0, 40689.0, 40690.0, 40691.0, '', u'Total', '']
[u'E45776', u'Seat Belt Study', '', 8.0, 8.0, 8.0, 8.0, u' ', '', 32.0, '', '', '', '', '', u' ', '', 0.0, 32.0, 0.4155844155844156]
[u'E43457', u'MultiScaleWaterQuality', '', '', '', '', '', 8.0, '', 8.0, '', 5.0, 8.0, u' ', '', '', '', 13.0, 21.0, 0.2727272727272727]
[u'E45125', u'GLOSS', '', '', '', '', '', '', '', 0.0, '', '', '', 8.0, 8.0, '', '', 16.0, 16.0, 0.2077922077922078]
[u'E45131', u'GLOS AOC Trib Monitoring', '', '', '', '', '', '', '', 0.0, '', '', '', '', '', 8.0, '', 8.0, 8.0, 0.1038961038961039]

这个代码看起来像是生成了一个列表对象,但我尝试对它进行操作或添加内容时,总是出现错误,提示说它不能被脚本化或迭代。文件的遍历将使用os模块,通过os.listdir(path)和一个for循环来处理。任何帮助都会非常感激!

2 个回答

1
data = []
for i in xrange(sh.nrows):
    data.append(sh.row_values(i))
it will append each rows from xls file into list "data".
eg: [['a','b'],['c','d'],['e','f']] like this .

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

3

到目前为止,你的代码似乎没有对从工作表中获取的值做任何处理。也许你有些代码没有粘贴到问题里……

你能把最后一行代码的输出结果也贴上来吗?

你说你想把所有内容存储在一个列表里。
试试下面这样的写法:

final = []
for rowx in xrange(sh.nrows):
    final.extend(sh.row_values(rowx))

另外:
在使用Windows路径时要小心。单个反斜杠只有在后面的字母不和反斜杠一起形成转义序列时才有效(比如 \t 表示制表符)。这里有几个其他的选项(选项3可能是最好的;除非有特别的原因不使用它):

  1. 原始字符串:book = xlrd.open_workbook(r'c:\excelTry\Papineau.csv.xls')
  2. 正斜杠:book = xlrd.open_workbook('c:/excelTry/Papineau.csv.xls')
  3. os.path.join:
    book = xlrd.open_workbook(os.path.join('c:','excelTry','Papineau.csv.xls'))

撰写回答