Почему работает переменная, а не список для открытия рабочей книги с использованием xlrd в python? - PullRequest
3 голосов
/ 11 мая 2019

Я чрезвычайно новичок в python, поэтому я ценю любую помощь. Я нападаю на это со всех сторон, которые я могу представить в течение последних 4 дней, в надежде, что смогу понять это сам, но я в замешательстве.

Я пытаюсь создать список файлов из определенного каталога с расширением .xlsx. Затем я хочу взять эти имена файлов из списка и запустить некоторую функцию, передав обнаруженное имя файла в функцию и повторяя его с каждым именем файла. Я пытался сделать это несколькими способами, но по какой-то причине я не приму имена файлов.

import os
import xlrd

mypath = "some path to files"
fileslist = []

def find_files():
    for file in os.listdir(mypath):
        if file.endswith(".xlsx")
            fileslist.append(file)

def other_function():    
    book = xlrd.open_workbook(fileslist)

Я могу напечатать список файлов и показать, что он заполнен правильной информацией. Я сделал это как в основной части скрипта, так и в области other_function (). Я также попытался протестировать именование переменного списка файлов с допустимым именем файла в каталоге, скажем, «file1.xlsx», и это работает. После ввода его в список, даже если единственная запись в списке - «file1.xlsx», я получаю следующую ошибку

book = xlrd.open_workbook(fileslist)
  File "/Library/Python/2.7/site-packages/xlrd/__init__.py", line 110, in open_workbook
    filename = os.path.expanduser(filename)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py", line 254, in expanduser
    if not path.startswith('~'):
AttributeError: 'list' object has no attribute 'startswith'

1 Ответ

1 голос
/ 11 мая 2019

xlrd ищет путь к файлу для открытия. Список (файлов): 1) не путь к файлу, а несколько путей к файлам и 2) не строка, что является конкретной ошибкой, которую вы получаете. Строка (которая является объектом Python) имеет метод .startswith, который позволяет xlrd проверить, является ли первая часть пути к файлу (вы должны дать open_workbook) ~ или нет. xlrd, вероятно, сделал это, потому что это повлияет на то, где он ищет файл.

xlrd.open_workbook по сути пытается дважды щелкнуть путь к файлу, который вы отправляете, вы (по сути) пытаетесь щелкнуть по всем файлам в вашем списке одновременно, что может быть возможно, если у вас может быть другой X компьютерные мыши с рукой для каждой, но на самом деле невозможно, как обычно строятся компьютеры.

Если вы хотите создать словарь для разных рабочих книг, которые вы открыли, но открыли с помощью xlrd, вы можете использовать это:

xlrd_wbs = dict()
for my_file in filelist:
    xlrd_wbs[my_file] = xlrd.open_workbook(my_file)

, а затем получить доступ к различным файлам с помощью:

xlrd_wbs[whatever_file_path_you_used]

Я бы использовал здесь словарь, потому что он позволяет вам получить доступ к тому файлу, который вы хотите более надежно, хотя, если вы просто хотите список, вы можете сделать это:

xlrd_wbs = []
for my_file in filelist:
    xlrd_wbs.append(xlrd.open_workbook(my_file))
...