File對象
django.core.files
子產品及其子子產品包含了一些用于基本檔案處理的内建類。
File類
class File(file_object)
File
類是Python
file 對象的一個簡單封裝,并帶有Django特定的附加功能。需要表示檔案的時候,Django内部會使用這個類。
File對象擁有下列屬性和方法:
name
含有
MEDIA_ROOT
相對路徑的檔案名稱。
size
檔案的位元組數。
file
這個類所封裝的,原生的
。
mode
檔案的讀寫模式。
open([mode=None])
打開或者重新打開檔案(同時會執行
File.seek(0)
)。
mode
參數的值和Python内建的
open()
相同。
重新打開一個檔案時,無論檔案原先以什麼模式打開,
mode
都會覆寫;
None
的意思是以原先的模式重新打開。
read([num_bytes=None])
讀取檔案内容。可選的
size
參數是要讀的位元組數;沒有指定的話,檔案會一直讀到結尾。
__iter__()
疊代整個檔案,并且每次生成一行。
Changed in Django 1.8:
File現在使用[通用的換行符](https://www.python.org/dev/peps/pep-0278)。以下字元會識别為換行符:Unix換行符'\n',WIndows換行符'\r\n',以及Macintosh舊式換行符'\r'。
chunks([chunk_size=None])
疊代整個檔案,并生成指定大小的一部分内容。
chunk_size
預設為64 KB。
處理大檔案時這會非常有用,因為這樣可以把他們從磁盤中讀取出來,而避免将整個檔案存到記憶體中。
multiple_chunks([chunk_size=None])
如果檔案足夠大,需要按照提供的
chunk_size
切分成幾個部分來通路到所有内容,則傳回
True
write([content])
将指定的内容字元串寫到檔案。取決于底層的儲存系統,寫入的内容在調用
close()
之前可能不會完全送出。
close()
關閉檔案。
除了這些列出的方法,
File
暴露了
file
對象的以下屬性和方法:
encoding
,
fileno
flush
isatty
newlines
read
readinto
readlines
seek
softspace
tell
truncate
writelines
xreadlines
ContentFile類
class ContentFile(File)[source]
ContentFile
類繼承自
File
,但是并不像
File
那樣,它操作字元串的内容(也支援位元組集),而不是一個實際的檔案。例如:
from __future__ import unicode_literals
from django.core.files.base import ContentFile
f1 = ContentFile("esta sentencia está en español")
f2 = ContentFile(b"these are bytes")
ImageFile類
class ImageFile(file_object)[source]
Django特地為圖像提供了這個内建類。
django.core.files.images.ImageFile
繼承了
File
的所有屬性和方法,并且額外提供了以下的屬性:
width
圖像的像素機關寬度。
height
圖像的像素機關高度。
附加到對象的檔案的額外方法
任何關聯到一個對象(比如下面的
Car.photo
)的
File
都會有一些額外的方法:
File.save(name, content[, save=True])
以提供的檔案名和内容儲存一個新檔案。這樣不會替換已存在的檔案,但是會建立新的檔案,并且更新對象來指向它。如果
save
為
True
,模型的
save()
方法會在檔案儲存之後調用。這就是說,下面兩行:
>>> car.photo.save('myphoto.jpg', content, save=False)
>>> car.save()
等價于:
>>> car.photo.save('myphoto.jpg', content, save=True)
要注意
content
參數必須是
File
或者
File
的子類的執行個體,比如
ContentFile
File.delete([save=True])
從模型執行個體中移除檔案,并且删除内部的檔案。如果
save
是
True
save()
方法會在檔案删除之後調用。
譯者: Django 文檔協作翻譯小組 ,原文: File objects 本文以 CC BY-NC-SA 3.0 協定釋出,轉載請保留作者署名和文章出處。 人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。