在Django中打开一个不在项目目录中的动态文件

时间:2014-12-19 15:38:50

标签: python django file-io

所以我正在开发一个应用程序,允许用户上传CSV文件,然后生成与其文件对应的图形数据。只有当上传的文件位于项目的当前工作目录中时,我才能在开发中工作。

我发现这背后的原因是因为在我的graph视图中我打开了这样的文件:

data_file = open(new_file, 'rb')

Open期望在项目目录中找到该文件。如果我尝试在该目录之外上传文件,则会抛出此错误:

Errno 2] No such file or directory: 'test.CSV'

我读过关于os.path.expanduser并尝试过:

data_file = open(os.path.expanduser('~' + new_file), 'rb')

但没有成功。上面的代码尝试在C:/Users/test.csv中找到该文件。

有关如何实现这一目标的任何建议将不胜感激。

修改

我目前的尝试是:

file_upload_dir = os.path.join(settings.MEDIA_ROOT, 'Data_Files')
data_file = open(os.path.join(file_upload_dir, new_file), 'rb')

错误是:

File b'test.CSV' does not exist

Data_Files是我的Media文件夹中的文件夹。

2 个答案:

答案 0 :(得分:1)

您需要加入~,并将文件名与目录分隔符(os.sep)联系起来。使用os.path.join会为您完成。

data_file = open(os.path.expanduser(os.path.join('~', new_file)), 'rb')

答案 1 :(得分:1)

上传的文件以及应用程序生成的文件与项目目录(=>源代码)无关。您有一个设置存储位置的设置(settings.MEDIA_ROOT),并且您有一个models.FileField来记住它们的存储位置以及如何访问它们。