为什么Python open()函数不接受“目录/文件名”作为参数?

时间:2018-09-05 09:40:16

标签: python with-statement

本地环境: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:[错误21]是目录:“上载”

在第二种情况下,我将文件夹名称传递给open函数。如果我通过文件路径,则会返回错误:

  

NotADirectoryError:[Errno 20]不是目录:'uploads / Project2.csv'

我感到困惑。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

首先,您必须确定该路径在远程服务器上是否存在。

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"

答案 1 :(得分:0)

在两种环境中,“上载”是代码目录的子目录,但是...

在本地环境中,相对路径已足够:

"uploads/file"

在远程环境中,需要绝对路径:

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

我认为这与在远程环境中而不是本地环境中将Bottle作为WSGI对象有关。