2012-06-07 2 views
0

Я пытаюсь выполнить поиск документа excel и если имя файла mp3 соответствует в документе excel, оно печатает строку, в которой находится экземпляр имени.openpyxl basic search

это то, что у меня есть:

from mutagen.easyid3 import EasyID3 
from openpyxl import load_workbook 
import glob 
import re 
import os 
for name in glob.glob('*.mp3'): 
    audio = EasyID3(name) 
    wb = load_workbook('xl.xlsx') 
    sh = wb.get_sheet_by_name('Russian') 
    for row in sh: 
    if row.value == name: 
     print row.number 
+1

Просьба рассмотреть [* улучшение вашего вопроса *] (http://www.catb.org/~esr/faqs/smart-questions.html#beprecise) –

+0

И? Каков твой вопрос? –

ответ

2

Прежде всего вы загружаете книгу и найти лист для каждого .mp3 файла. Переместите этот код за пределы цикла.

Вторая проблема заключается в том, что вы пытаетесь выполнить итерацию по рабочему листу sh, который не является итерируемым.

Третья проблема заключается в том, что вы тестируете row.value равным имени, где вы, вероятно, хотите sh.cell[0].value

Ваш код должен выглядеть примерно:

from mutagen.easyid3 import EasyID3 
from openpyxl import load_workbook 
import glob 
import re 
import os 
wb = load_workbook('xl.xlsx') 
sh = wb.get_sheet_by_name('Russian') 
for name in glob.glob('*.mp3'): 
    audio = EasyID3(name) 
    for row_index in range(sh.get_highest_row()): 
     if sh.cell(row=row_index, column=0).value == name: 
      print(row_index) 

Как указано @Bill Кидд, в openpyxl 2.4.2 вам нужно будет заменить .get_highest_row() на .max_row (без брекетов!).

+0

Ответ Антона в основном правильный. В «if row.cell (row = row_index, column = 0) .value == name:« Замените «row.cell» на «sh.cell», потому что нет объекта строки. Кроме того, по этой же причине замените «print row.number» на «print (row_index)». В openpyxl 2.4.2 нет метода Worksheet «get_highest_row()», вместо этого используйте свойство «max_row». –

+0

@BillKidd Обновлен ответ, спасибо. – Anthon

+0

Рабочие листы итерабельны как строки. –

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