2014-12-19 58 views
0

因此,我正在開發一個應用程序,允許用戶上傳CSV文件,然後生成與其文件相對應的圖形數據。只有當上傳的文件位於項目的當前工作目錄中時,我才能在開發中工作。在Django中打開一個不在項目目錄中的動態文件

我發現,這背後的原因是因爲在我鑑於我打開文件像這樣:

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是我的媒體文件夾中的文件夾。

+0

你的'file_upload_dir'中是否有'test.CSV'文件? –

+0

是的,因爲這是由用戶上傳的文件,被引用爲new_file。 –

回答

1

您需要加入~,並將文件名與目錄分隔符(os.sep)一起使用。使用os.path.join將爲您做到這一點。

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

這讓我更深入一層,但我應該提到new_file只是從會話接收的文件名,而不是文件的完整路徑。我想如果我給我的文件模型一個路徑並將該路徑存儲在會話中以便將它傳遞給圖形視圖,然後從那裏打開它,這將工作? –

1

上傳的文件以及您的應用程序生成的文件在項目目錄(=>源代碼)中沒有任何關係。您可以設置存儲位置(settings.MEDIA_ROOT),並且您有一個models.FileField可以記住它們的存儲位置以及如何訪問它們。

+0

大杜伊對我來說。我的嘗試顯示在我上面的編輯中。 –