2014-09-29 11 views
1

Попытка извлечь .xlsx документы из файла и скомпилировать данные в один рабочий лист.Python/Excel - IOError: [Errno 2] Нет такого файла или каталога:

Прием IOError, несмотря на то, что файлы существуют

программы выглядит следующим образом

#-------------- loop that pulls in files from folder-------------- 
import os 

#create directory from which to pull the files 
rootdir = r'C:\Users\username\Desktop\Mults' 

for subdir, dir, files in os.walk(rootdir): 
for file in files: 
    print os.path.join(subdir,file) 
#----------------------merge work books----------------------- 

import xlrd 
import xlsxwriter 


wb = xlsxwriter.Workbook('merged.xls') 
ws = wb.add_worksheet() 
for file in files: 
    r = xlrd.open_workbook(file) 
    head, tail = os.path.split(file) 
    count = 0 
    for sheet in r: 
     if sheet.number_of_rows()>0: 
      count += 1 
    for sheet in r: 
     if sheet.number_of_rosw()>0: 
      if count == 1: 
       sheet_name = tail 
      else: 
       sheet_name = "%s_%s" (tail, sheet.name) 
      new_sheet = wb.create_sheet(sheet_name) 
      new_sheet.write_reader(sheet) 
      new_sheet.close() 
wb.close() 

Возврат ошибки следующим образом

doc1.xlsx 
doc2.xlsx 
doc3.xlsx 
doc4.xlsx 

Traceback (most recent call last): 
    File "C:\Users\username\Desktop\Work\Python\excel practice\xlsx - loops files - 09204.py", line 23, in <module> 
    r = xlrd.open_workbook(file) 
    File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 394, in open_workbook 
    f = open(filename, "rb") 
IOError: [Errno 2] No such file or directory: 'doc1.xlsx' 

Любые предложения или изменения?

Кроме того, любой совет, если я направляюсь в правильном направлении?

Я новичок в мире python, поэтому любые советы будут высоко оценены!

Спасибо!

ответ

2

Вы открываете обычное имя файла без пути; вы игнорируете компонент каталога.

Не просто напечатать os.path.join() результат, на самом деле использовать его:

filename = os.path.join(subdir, file) 
r = xlrd.open_workbook(filename) 
+0

Вы предлагаете заменить синтаксис печати на синтаксис, который вы дали? –

+0

@MikeV .: Я предлагаю вам заменить вызов 'xlrd.open_workbook()' кодом, который я дал. –

+0

Хорошо, спасибо! Поэтому я заменил его и теперь получаю эту ошибку для листа в r: TypeError: объект «Book» не является итерируемым –

0

Для первой задачи ...

Вместо:

r = xlrd.open_workbook(file) 

Использование:

r = xlrd.open_workbook(os.path.join(subdir,file)) 

За е TypeError: Вместо:

for sheet in r: 
    if sheet.number_of_rows()>0: 
     count += 1 

Использование:

for nsheet in r.sheet_names() #you need a list of sheet names to loop throug 
    sheet = r.sheet_by_name(nsheet) #then you create a sheet object with each name in the list 
    if sheet.nrows>0: #use the property nrows of the sheet object to count the number of rows 
     count += 1 

Сделайте то же самое для второго цикла.

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