2011-06-03 29 views
2

我沒有太多xp與xlrd/xlwt,但我設法訪問我想從中收集數據的文件之一。我想從目錄中的所有文件收集數據並將其移動到一張紙上。我在想如果有一些方法可以將它們全部存儲在一個數組/列表中,那麼輸出到csv會很容易。如果這是太多的工作,有一個簡單的方法plz幫助,否則我使用空閒擺弄的想法,並想出這個至今:xlrd:想讀取幾個xl文件的表單並存儲在一個列表/數組中? (更好的方法?)

>>> 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.listdir(path)和for循環的os模塊進行處理。任何幫助將不勝感激!

回答

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'))
+0

我想出瞭如何追加它們,但我已經包含了結果供您查看。所以,如果我理解正確,final.extend()將允許我繼續在前一個文件的末尾處的相同數組?非常感謝你。我會稍微玩一下,看看你是否有機會回答。 – Corey 2011-06-03 15:42:27

+1

是的。您可以使用'extend()'將每個表的行值放入'final'列表中,這將根據文檔「通過追加給定列表中的所有項目來擴展列表;等同於'a [len(a):] = L'「。 「 – bernie 2011-06-03 15:47:16

+0

太棒了,再次感謝! – Corey 2011-06-03 17:11:46

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 . 
相關問題