Почему функция Python open () не принимает в качестве аргумента «каталог / имя файла»? - PullRequest
0 голосов
/ 05 сентября 2018

Локальная среда: Python 3, Bottle, MacOs

Удаленная среда: Python 3, Bottle, Pythonanywhere

Это работает в моей локальной среде, но не в моей удаленной среде:

@route('/test')
def test():
    '''Function tests file open issue.'''
    with open('uploads/Project2.csv', 'r', newline='') as file:
        content = ""
        content = file.read()
    return content

Это работает в моей удаленной среде, но не в моей локальной среде:

@route('/test')
def test():
    '''Function tests file open issue.'''
    with open('uploads', 'r', newline='') as file:
        content = ""
        content = file.read()
    return content

В первом случае я передаю путь к файлу в функцию open. Если я передаю имя папки , она возвращает эту ошибку:

IsADirectoryError: [Errno 21] Является каталогом: 'uploads'

Во втором случае я передаю имя папки функции открытия. Если я передаю путь к файлу , возвращается ошибка:

NotADirectoryError: [Errno 20] Не каталог: 'uploads / Project2.csv'

Я сбит с толку. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

В обеих средах "uploads" - это подкаталог каталога кода, но ...

В локальной среде достаточно относительного пути:

"uploads/file"

В удаленной среде требовался абсолютный путь:

"/home/my_projects/project/uploads/file"

Я думаю, что это связано с тем, что Bottle является объектом WSGI в удаленной среде, но не в локальной.

0 голосов
/ 05 сентября 2018

Сначала вы должны убедиться, существует ли путь на удаленном сервере.

import os 
os.path.exists(<your path>)

второй, вам не нужно объявлять вашу переменную содержимого, вы можете просто объявить ее как это.

content = file.read()

В-третьих,

"uploads" is a directory not a file. Provide a file name in your
directory like you have provided in your local environment. if 
"upload" is not a subdirectory of your code directory, then provide
absolute path. like 
upload = "/home/ubuntu/env/uploads/projects.csv"
...