Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中从媒体目录打开数据文件_Python_Django_File Io_Django Media - Fatal编程技术网

Python 在Django中从媒体目录打开数据文件

Python 在Django中从媒体目录打开数据文件,python,django,file-io,django-media,Python,Django,File Io,Django Media,我有一个应用程序,允许用户上传带有数据的CSV文件,然后用图形显示给用户。这些文件保存为“我的媒体”文件夹中的媒体。然而,在我的图形视图中,我需要打开文件并对其进行处理。我的问题是,我只能打开项目当前工作目录中的文件,每当我尝试从该目录之外的某个位置上载文件时,我都会遇到以下错误: File b'TEST.CSV' does not exist 我尝试过这一点,但没有成功: file_upload_dir = os.path.join(settings.MEDIA_ROOT, 'Data_Fi

我有一个应用程序,允许用户上传带有数据的CSV文件,然后用图形显示给用户。这些文件保存为“我的媒体”文件夹中的媒体。然而,在我的图形视图中,我需要打开文件并对其进行处理。我的问题是,我只能打开项目当前工作目录中的文件,每当我尝试从该目录之外的某个位置上载文件时,我都会遇到以下错误:

File b'TEST.CSV' does not exist
我尝试过这一点,但没有成功:

file_upload_dir = os.path.join(settings.MEDIA_ROOT, 'Data_Files')
data_file = open(os.path.join(file_upload_dir, new_file), 'rb')
变量
new_file
只是会话中保存的文件名,而不是该文件的路径
Data_Files
是媒体目录中包含上载文件的目录

Django的媒体设置如下

SETTINGS_DIR = os.path.dirname(__file__)
PROJECT_PATH = os.path.join(SETTINGS_DIR, os.pardir)
PROJECT_PATH = os.path.abspath(PROJECT_PATH)

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
是否有方法从视图中正确引用媒体文件

这是
文件上传目录的输出和新文件的位置

>>> print(file_upload_dir)
C:\\Users\\vut46744\\Desktop\\graphite_project\\media\\Data_Files

>>> print(os.path.join(file_upload_dir, new_file))
C:\\Users\\vut46744\\Desktop\\graphite_project\\media\\Data_Files\\TEST.CSV

通常,您不应该在Django应用程序中使用
open()
访问文件。您应该使用存储API。这使您的代码能够很好地使用Django设置和增强此API的潜在第三方应用程序。

所以在这里你应该做一些类似的事情

from django.core.files.storage import default_storage

f = default_storage.open(os.path.join('Data_Files', new_file), 'r')
data = f.read()
f.close()
print(data)
顺便说一句,如果您希望它是模块化的,最好有一个自定义存储类,以便在您的需求发生变化时轻松配置和使用您的应用程序。此外,它还允许将文件放在
媒体根目录之外。此示例存储将把它们放入
设置中。上载\u ROOT
(如果未找到设置,则默认为
媒体\u ROOT

我们在这里创建了一个非常简单的存储。它只是普通的一个,但是它从另一个目录读取它的文件。然后,我们设置一个惰性对象,该对象将允许从设置覆盖该存储

因此,现在您的代码变成:

from myapp.storage import uploads_storage
f = uploads_storage.open(new_files, 'r')

在您的设置中,您可以将
上传\u ROOT
设置为您喜欢的任何内容。可能是媒体目录之外的内容。如果有一天你决定将上传存储在数据库中,你可以将
uploads\u STORAGE
设置为数据库支持的存储,你的代码会很乐意使用它。

你能打印file\u upload\u dir和os.path.join(file.upload\u dir,newfile)的结果吗?你有从该目录读取的权限吗?是的,我有读/写权限。当用户通过表单上传文件时,它会保存在媒体文件夹中。然后,我尝试从媒体文件夹访问该文件,但无论出于何种原因,它都表示该文件不存在。当我在假期后返回工作岗位时,我将致力于实施该解决方案,一旦该解决方案生效,我将批准该解决方案作为答案。谢谢你的详细解释。
from myapp.storage import uploads_storage
f = uploads_storage.open(new_files, 'r')