2014-10-01 7 views
0

Попытка собрать несколько .xlsx книг из файла в одном .csvPython/Excel - Слияние .xlsx книги из файла в формате CSV

Loop я создал только захватывая первую книгу из файла.

Как я могу изменить это, чтобы захватить все книги в файле? Данные относятся только к Sheet1 из всех книг

import os 
import xlrd 
import csv 

rootdir = r'C:\Users\username\Desktop\Mults' 
filenames = [] 
for subdir, dir, files in os.walk(rootdir): 
    for file in files: 
     filenames.append(os.path.join(subdir, file)) 
     wb = xlrd.open_workbook(os.path.join(subdir, file)) 
     sh = wb.sheet_by_index(0) 
     with open('acit_multsTEST.csv','wb') as f: 
     c = csv.writer(f) 
     for r in range(sh.nrows): 
      c.writerow(sh.row_values(r)) 

Я ценю любую помощь!

Спасибо!

+0

Существуют ли поддиры, содержащие книги под вашим корневым каталогом? Если нет, вам не нужно использовать 'walk', но вместо этого можно использовать' glob'. – b10n

ответ

2

Так что вам нужно сделать следующее.

  • Получить список всех книг
  • Откройте главный CSV, чтобы добавить все ваши данные
  • перебирать свой список книг
  • Append каждый лист в свой файл CSV

    import glob 
    import os 
    import xlrd 
    import csv 
    
    ROOTDIR = r'C:\Users\username\Desktop\Mults' 
    wb_pattern = os.path.join(ROOTDIR, '*.xlsx') 
    
    workbooks = glob.glob(wb_pattern) 
    
    with open('out.csv', 'wb') as outcsv: 
        writer = csv.writer(outcsv) 
        for wb in workbooks: 
         book_path = os.path.join(ROOTDIR, wb) 
         book = xlrd.open(book_path) 
         sheet = book.sheet_by_index(0) 
         for row_num in xrange(sheet.nrows): 
          row = sheet(row_num) 
          writer.writerow(row) 
    
+0

Удивительный! Благодаря! Это сработало. Теперь мне просто нужно отформатировать данные. Я ценю это. –

+0

Похоже, что это был просто «os.path.walk», не так ли? –

+0

Рекурсия сложна в лучшие времена и в этом случае не нужна. упрощая его с помощью 'glob', казалось мудрым. я думал, что ваше предложение вывести его из цикла должно сработать, но когда op все еще застрял, я подумал, что лучше начать все сначала. – b10n

Смежные вопросы