2016-12-19 3 views
1

Я делаю сводное сравнение двух книг и выводя третью. Я делаю это, экспортируя каждую рабочую книгу (идентично структурированную, содержащую 15 листов) в серию csv-файлов, а затем выполняю сравнение таблицы с таблицей, читая в csv-файле A и его названном csv-файле B, преобразованном со второго Учебное пособие.Python: Итерация через рабочие листы для экспорта в csv

Я использую xlrd и csv

Вот часть кода, который не удается:

outpath_a = os.path.join(working_directory, "out_a") # dir set earlier 
workbook_a_sheets = workbook_a.sheet_names() 
workbook_b_sheets = workbook_b.sheet_names() 

for a in workbook_a_sheets: 
    out_csv = os.path.join(outpath_a, a) 
    with open(out_csv, 'wb') as oca: 
     cw = csv.writer(oca, dialect=csv.excel, quoting=csv.QUOTE_ALL) 
     for rownum in xrange(a.nrows): 
      cw.writerow(a.row_values(rownum)) 

Это дает мне ошибку:

AttributeError: 'unicode' object has no attribute 'nrows' 

Я попытался с помощью unicodecsv вместо от csv (import unicodecsv as csv), но ошибка такая же.

+0

вы, вероятно, означает 'xrange (workbook_a.nrows)'. 'a' является _name_ вашего рабочего листа, а не листом. –

+0

Разве это не поиск всей книги? Я хочу перебирать каждый лист и экспортировать каждый лист в собственный файл csv. – auslander

+0

вы правы! вы должны получить объект листа, используя его имя. –

ответ

0

Вы пытаетесь получить доступ к названию листа, как если бы это был объект листа.

Вам нужно вызвать метод sheet_by_name на вашей книги, чтобы получить его

фиксированный цикл:

for a in workbook_a_sheets: 
    out_csv = os.path.join(outpath_a, a) 
    with open(out_csv, 'wb') as oca: 
     cw = csv.writer(oca, dialect=csv.excel, quoting=csv.QUOTE_ALL) 
     # get sheet object from its name 
     a_sheet = workbook_a.sheet_by_name(a) 
     for rownum in xrange(a_sheet.nrows): 
      cw.writerow(a_sheet.row_values(rownum)) 
+0

Отлично! Небольшая часть xlrd вселенной открылась мне. Это сработало, но даже лучше, я понимаю, почему сейчас. – auslander

+0

Это точка попытки чего-то при публикации вопроса (даже если он не работает) –

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