天天看點

django 1.8 官方文檔翻譯: 3-3-2 File對象File對象

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。