django.core.files
模塊及其子模塊包含了一些用于基本文件處理的內(nèi)建類。
class File(file_object)
File
類是Python file 對象的一個簡單封裝,并帶有Django特定的附加功能。需要表示文件的時候,Django內(nèi)部會使用這個類。
File對象擁有下列屬性和方法:
name
含有MEDIA_ROOT
相對路徑的文件名稱。
size
文件的字節(jié)數(shù)。
file
這個類所封裝的,原生的file 對象。
mode
文件的讀寫模式。
open([mode=None])
打開或者重新打開文件(同時會執(zhí)行File.seek(0)
)。 mode
參數(shù)的值和Python內(nèi)建的open()
相同。
重新打開一個文件時,無論文件原先以什么模式打開,mode
都會覆蓋;None
的意思是以原先的模式重新打開。
read([num_bytes=None])
讀取文件內(nèi)容??蛇x的size
參數(shù)是要讀的字節(jié)數(shù);沒有指定的話,文件會一直讀到結(jié)尾。
__iter__()
迭代整個文件,并且每次生成一行。
Changed in Django 1.8:
File現(xiàn)在使用[通用的換行符](https://www.python.org/dev/peps/pep-0278)。以下字符會識別為換行符:Unix換行符'\n',WIndows換行符'\r\n',以及Macintosh舊式換行符'\r'。
chunks([chunk_size=None])
迭代整個文件,并生成指定大小的一部分內(nèi)容。chunk_size
默認(rèn)為64 KB。
處理大文件時這會非常有用,因?yàn)檫@樣可以把他們從磁盤中讀取出來,而避免將整個文件存到內(nèi)存中。
multiple_chunks([chunk_size=None])
如果文件足夠大,需要按照提供的chunk_size
切分成幾個部分來訪問到所有內(nèi)容,則返回True
。
write([content])
將指定的內(nèi)容字符串寫到文件。取決于底層的儲存系統(tǒng),寫入的內(nèi)容在調(diào)用close()
之前可能不會完全提交。
close()
關(guān)閉文件。
除了這些列出的方法,File
暴露了 file
對象的以下屬性和方法:encoding
, fileno
, flush
, isatty
, newlines
, read
, readinto
, readlines
, seek
, softspace
, tell
, truncate
, writelines
, xreadlines
。
class ContentFile(File)[source]
ContentFile
類繼承自File
,但是并不像File
那樣,它操作字符串的內(nèi)容(也支持字節(jié)集),而不是一個實(shí)際的文件。例如:
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")
class ImageFile(file_object)[source]
Django特地為圖像提供了這個內(nèi)建類。django.core.files.images.ImageFile
繼承了 File
的所有屬性和方法,并且額外提供了以下的屬性:
width
圖像的像素單位寬度。
height
圖像的像素單位高度。
任何關(guān)聯(lián)到一個對象(比如下面的Car.photo
)的File
都會有一些額外的方法:
File.save(name, content[, save=True])
以提供的文件名和內(nèi)容保存一個新文件。這樣不會替換已存在的文件,但是會創(chuàng)建新的文件,并且更新對象來指向它。如果save
為True
,模型的save()
方法會在文件保存之后調(diào)用。這就是說,下面兩行:
>>> car.photo.save('myphoto.jpg', content, save=False)
>>> car.save()
等價于:
>>> car.photo.save('myphoto.jpg', content, save=True)
要注意content
參數(shù)必須是File
或者 File
的子類的實(shí)例,比如ContentFile
。
File.delete([save=True])
從模型實(shí)例中移除文件,并且刪除內(nèi)部的文件。如果save
是True
,模型的save()
方法會在文件刪除之后調(diào)用。
譯者:Django 文檔協(xié)作翻譯小組,原文:File objects。
本文以 CC BY-NC-SA 3.0 協(xié)議發(fā)布,轉(zhuǎn)載請保留作者署名和文章出處。
Django 文檔協(xié)作翻譯小組人手緊缺,有興趣的朋友可以加入我們,完全公益性質(zhì)。交流群:467338606。