2010-09-23 2 views
2

ДАННЫЕ Я использую питона xlrd http://scienceoss.com/read-excel-files-from-python/ считывать данные из листа первенствоватьPython xlrd экстракцию

Мой вопрос, если я прочитал строку с первой ячейки, как «Имя сотрудника» в листе первенствовать

И еще одна строка с именем которого первая ячейка «имя сотрудника»

Как мы можем прочитать последний столбец, начиная с последней строки, которая имеет «имя сотрудника» в первом cell.Ignoring предыдущий

wb = xlrd.open_workbook(file,encoding_override="cp1252") 
    wb.sheet_names() 
    sh = wb.sheet_by_index(0) 
    num_of_rows = sh.nrows 
    num_of_cols = sh.ncols 
    valid_xl_format = 0 
    invalid_xl_format = 0 

    if(num_of_rows != 0): 
    for i in range(num_of_rows): 
     questions_dict = {} 
     for j in range(num_of_cols): 
       xl_data=sh.cell(i,j).value 
       if ((xl_data == "Employee name")): 
        # Regardless of how many "Employee name" found in rows first cell,Read only the last "Employee name" 

ответ

5

Я использую питон xlrd http://scienceoss.com/read-excel-files-from-python/ считывать данные из листа первенствовать

Вы должны думать о чем ты делают, вместо того, чтобы хватать некоторый код блога и оставлять в совершенно неактуальных вещах, таких как wb.sheet_names() и опускать части, имеющие отношение к вашему требованию, как first_column = sh.col_values(0).

Вот как найти row_index последнего «любой» в колонке А (первая колонка) - непроверенные:

import xlrd 
wb = xlrd.open_workbook(file_name) 
# Why do you think that you need to use encoding_overide? 
sheet0 = wb.sheet_by_index(0) 
tag = u"Employee name" # or u"Emp name" or ... 
column_0_values = sheet0.col_values(colx=0) 
try: 
    max_tag_row_index = column_0_values.rindex(tag) 
    print "last tag %r found at row_index %d" % (
     tag, max_tag_row_index) 
except IndexError: 
    print "tag %r not found" % tag 

Теперь мы должны интерпретировать "Как мы можем прочитать последнюю запуск колонки с последней строкой, которая имеет имя «Сотрудник» в первой ячейке "

Если предположить, что„последний столбец“означает один с column_index == sheet0.ncols - 1, то:

last_colx = sheet0.ncols - 1 
required_values = sheet0.col_values(colx=last_colx, start_rowx=max_tag_row_index) 
required_cells = sheet0.col_slice(colx=last_colx, start_rowx=max_tag_row_index) 
# choose one of the above 2 lines, depending on what you need to do 

Если это не то, что вы имеете в виду (что вполне возможно, так как оно игнорирует целую кучу данных (почему вы хотите прочитать только последний столбец?), Попробуйте объяснить примерами, что вы имеете в виду.

Возможно, вы хотите перебрать оставшиеся клетки:

for rowx in xrange(max_tag_row_index, sheet0.nrows): # or max_tag_row_index + 1 
    for colx in xrange(0, sheet0.ncols): 
     do_something_with_cell_object(sheet0.cell(rowx, colx)) 
+0

. Приведенный код был всего лишь примером. В любом случае спасибо за зол ... – Hulk

0

Трудно понять, что именно вы спрашиваете.
Проведение пробных данных может помочь сделать ваше намерение более ясным.

Вы пробовали итерацию набор данных в обратном направлении ?, например:

for i in reversed(range(num_of_rows)): 
    ... 
    if xl_data == "Employee name": 
     # do something 
     # then break since you've found the final "Employee Name" 
     break 
+0

Чтобы не сказать, первая строка первая ячейка «имя Emp», вторая строка первая ячейка «имя Emp» и третья строка первой ячейки «имя Emp «В этом случае я хочу прочитать третью ячейку – Hulk

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

  • Нет связанных вопросов^_^