Получение IOError при попытке открыть файл через Kivy

Я пишу приложение, которое открывает CSV-файл и выкладывает данные с помощью Kivy. CSV-файл хранится в той же папке, что и main.py.

class BeerCellar(ScrollView):
    def __init__(self, **kwargs):
        super(BeerCellar, self).__init__(**kwargs)
        self.beer_list = []
        with open(os.path.join('beer_archive.csv'), 'rb', 1) as beer_csv:
            beer_reader = csv.DictReader(beer_csv)
            for beer in beer_reader:
                beer_list.append(beer)

Я могу открыть файл csv с помощью IDLE, но когда я щелкаю правой кнопкой мыши main.py и выбираю «отправить: Kivy 1.7.0», когда Kivy загружает его, я получаю следующую ошибку:

    File "C:\Users\Knute\Python\projects\Kivy_Stuff\Cellar\main.py", line 34, in
__init__
    with open(os.path.join('beer_archive.csv'), 'rb', 1) as beer_csv:
IOError: [Errno 2] No such file or directory: 'beer_archive.csv'

Права доступа к файлам установлены на чтение/запись для всех.
Использование Windows 7, Python 2.7


person Knut Knutson    schedule 07.07.2013    source источник


Ответы (1)


Файл beer_archive.csv не существует в вашем текущем рабочем каталоге, который, скорее всего, является папкой C:\Users\Knute\Python\projects\Kivy_Stuff\Cellar.

Без полного пути Python ищет в текущем рабочем каталоге, и то, что это такое, зависит от того, как была запущена ваша программа и были ли сделаны какие-либо вызовы os.chdir() для изменения текущего рабочего каталога.

Используйте полный путь к файлу архива:

with open(os.path.join(folder_path, 'beer_archive.csv'), 'rb', 1) as beer_csv:

где folder_path — полный путь к папке, в которой находится beer_archive.csv.

Обратите внимание, что вы можете сэкономить цикл, если все, что вы делаете, это добавляете строки из вашего CSV в self.beer_list; следующее сделает это в одной команде:

class BeerCellar(ScrollView):
    def __init__(self, **kwargs):
        super(BeerCellar, self).__init__(**kwargs)
        with open(os.path.join(folder_path, 'beer_archive.csv'), 'rb', 1) as beer_csv:
            self.beer_list = list(csv.DictReader(beer_csv))
person Martijn Pieters    schedule 07.07.2013
comment
Спасибо, Мартейн, кажется, это помогло! Двойное спасибо за совет по сохранению циклов. - person Knut Knutson; 08.07.2013