Python xlrd:要读取多个xl文件的工作表并存储在一个列表/数组中吗?(更好的方式?)
我没有太多使用xlrd/xlwt的xp,但我已经设法访问了我想从中收集数据的一个文件。我想从目录中的所有文件中收集数据,并将其移动到一张工作表中。我在想,如果有什么方法可以将所有数据存储在一个数组/列表中,那么输出到csv就很容易了。如果这是一个太多的工作,有一个简单的方法plz帮助,否则我就用空闲来玩弄的想法,并提出了这个到目前为止:Python xlrd:要读取多个xl文件的工作表并存储在一个列表/数组中吗?(更好的方式?),python,excel,xlrd,xlwt,Python,Excel,Xlrd,Xlwt,我没有太多使用xlrd/xlwt的xp,但我已经设法访问了我想从中收集数据的一个文件。我想从目录中的所有文件中收集数据,并将其移动到一张工作表中。我在想,如果有什么方法可以将所有数据存储在一个数组/列表中,那么输出到csv就很容易了。如果这是一个太多的工作,有一个简单的方法plz帮助,否则我就用空闲来玩弄的想法,并提出了这个到目前为止: >>> import xlrd, xlwt >>> book = xlrd.open_workbook('c:\excelT
>>> 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]
导入xlrd、xlwt
>>>book=xlrd.open_工作簿('c:\excelTry\Papineau.csv.xls')
>>>书页名称()
[u‘费用代码’,u‘月份’]
>>>sh=按索引(1)列出的图书页
>>>#生产:
>>>书
>>>对于范围(0,10)内的x:
sh.row_值(x)
[u'William Papineau',u'Pay Period 11','','','','','',u'Weekly Total','','','','','',u'Weekly Total',u'Biweekly',u'Percent of Work']
[u‘索引编号’、u‘索引说明’、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‘总计’、“”]
[u'E45776',u'安全带研究','',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.2727]
[u'E45125',u'GLOSS','','','','','',0.0','','',8.0,8.0','',16.0,16.0,0.2077922077922078]
[u'E45131',u'GLOS AOC Trib监控','','','','','',0.0',,'','','','','',8.0',8.0,8.0,0.10389610389691039]
这将生成看起来像列表对象的对象,但我每次尝试操作或附加它时都会产生错误,称为not scriptable或iterable。文件迭代将由os模块使用os.listdir(path)和for循环处理。任何帮助都将不胜感激 到目前为止,在您的代码中,您似乎没有使用从工作表中获得的值执行任何操作。也许有些代码没有粘贴到问题中 您能包含最后一行代码的输出吗 您说您想将其全部存储在一个列表中。
试着这样做:
final = []
for rowx in xrange(sh.nrows):
final.extend(sh.row_values(rowx))
另外:小心Windows路径。仅当下列字母与反斜杠不构成转义序列(例如
\t
或tab)时,单个反斜杠才有效。其他选项(选项3可能是最好的;除非有不使用它的特定原因):
book=xlrd.open_工作簿(r'c:\excelTry\Papineau.csv.xls')
book=xlrd.open_工作簿('c:/excelTry/Papineau.csv.xls')
book=xlrd.open_工作簿(os.path.join('c:'、'excelTry'、'Papineau.csv.xls'))
我知道了如何附加它们,但我已经包含了结果供您查看。如果我理解正确,final.extend()将允许我继续右移到上一个文件末尾的同一数组?非常感谢你。我会玩一会儿,看看你是否有机会回答。是的。您可以使用
extend()
将每张工作表的行值放入该final
列表,根据文档,该列表将“通过追加给定列表中的所有项目来扩展列表;相当于a[len(a):]=L
”
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 .