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