2013-06-25 8 views
1

Были проблемы с Google в течение довольно долгого времени, но не могут найти решение. Я использую функцию excelfiles для создания списка всех excelfiles, включая «tst» в их имени в указанном каталоге. После этого я хочу читать определенные ячейки из каждого документа с помощью функции locate_vals, но я не могу представить файлы из списка файлов. Может быть, есть очень простое решение, которое я просто не вижу? Ошибка, которую я получаю, находится внизу.Прочитать файлы из списка файлов

Это является частью более крупной задачи, я просил о помощи вчера («Search through directories for specific Excel files and compare data from these files with inputvalues»), но так как я не могу найти какой-либо ответ на этот вопрос, я думал, что это могло бы быть лучше, чтобы дать ему нить его собственной. Поправьте меня, если я ошибаюсь, и я удалю это :)

import xlrd 
import os, fnmatch 

#globals 

start_dir = 'C:/eclipse/TST-folder' 

def excelfiles(pattern): 
    file_list = [] 
    for root, dirs, files in os.walk(start_dir): 
     for filename in files: 
      if fnmatch.fnmatch(filename.lower(), pattern): 
       if filename.endswith(".xls") or filename.endswith(".xlsx") or filename.endswith(".xlsm"): 
        file_list.append(os.path.join(root, filename)) 
    return file_list 

file_list = excelfiles('*tst*')  # only accept docs hwom title includes tst 
for i in file_list: print i 


'''Location of each val from the excel spreadsheet''' 


def locate_vals(): 
    val_list = [] 
    for file in file_list: 
     wb = xlrd.open_workbook(os.path.join(start_dir, file)) 
     sheet = wb.sheet_by_index(0) 
     for vals in file: 
      weightvalue = file_list.sheet.cell(3, 3).value 
      lenghtvalue = sheet.cell(3, 2).value 
      speedval = sheet.cell(3, 4).value 

ErrorMessage:

Traceback (most recent call last): 
    File "C:\Users\Håvard\Documents\Skulearbeid\UMB\4. Semester Vår\Inf120 Programmering og databehandling\Workspace\STT\tst_mainsheet.py", line 52, in <module> 
    print locate_vals() 
    File "C:\Users\Håvard\Documents\Skulearbeid\UMB\4. Semester Vår\Inf120 Programmering og databehandling\Workspace\STT\tst_mainsheet.py", line 48, in locate_vals 
    weightvalue = file_list.sheet.cell(3, 3).value 
AttributeError: 'list' object has no attribute 'sheet' 

ответ

2

Проблема показал вашим TRACEBACK действительно, что это:

weightvalue = file_list.sheet.cell(3, 3).value 

должен быть таким:

weightvalue = sheet.cell(3, 3).value 

Однако в вашем коде было больше проблем. Я сделал незначительные исправления и пометив их в комментариях:

import xlrd 
import os, fnmatch 

start_dir = 'C:/eclipse/TST-folder' 

def excelfiles(pattern): 
    file_list = [] 
    for root, dirs, files in os.walk(start_dir): 
     for filename in files: 
      if fnmatch.fnmatch(filename.lower(), pattern): 
       if filename.endswith(".xls") or filename.endswith(".xlsx") or filename.endswith(".xlsm"): 
        file_list.append(os.path.join(root, filename)) 
    return file_list 

file_list = excelfiles('*tst*')  # only accept docs hwom title includes tst 
for i in file_list: print i 


'''Location of each val from the excel spreadsheet''' 


def locate_vals(): 
    val_dict = {} 
    for filename in file_list: 
     wb = xlrd.open_workbook(os.path.join(start_dir, filename)) 
     sheet = wb.sheet_by_index(0) 

     # problem 2: extract these values once per sheet 
     weightvalue = sheet.cell(3, 3).value 
     lengthvalue = sheet.cell(3, 2).value 
     speedvalue = sheet.cell(3, 4).value 

     # problem 3: store them in a dictionary, keyed on filename 
     val_dict[filename] = [weightvalue, lengthvalue, speedvalue] 

    # dictionary keyed on filename, with value a list of the extracted vals 
    return val_dict 

print locate_vals() 
+0

Спасибо! Я попробую этот подход вместо этого. В последнее время я так сильно искал проект, так что мой сценарий в настоящий момент беспорядок. – Havard

+0

Вам не кажется, что это более полный ответ? :) (спасибо!) –

+0

Да, я делаю :) Еще раз спасибо! – Havard

2

ошибка говорит все, что нужно:

AttributeError: 'list' object has no attribute 'sheet'

file_list список filenames, list не имеет атрибута sheet в python.

Итак, вам просто нужно заменить:

weightvalue = file_list.sheet.cell(3, 3).value 

с

weightvalue = sheet.cell(3, 3).value 
+0

Или '.cell_value (3, 3)' более явный. –

+0

Хорошая точка, спасибо. – alecxe

+0

Спасибо! Вероятно, должен был это увидеть;) Пробовал разные варианты, но всегда получал небольшие ошибки. В конце концов, я страдал от «ошибки-сообщения-слепоты». – Havard

1

Изменение:

weightvalue = file_list.sheet.cell(3, 3).value 

к:

weightvalue = sheet.cell(3, 3).value