django.core.files模塊及其子模塊包含了一些用于基本文件處理的內建類。
class File(file_object)
File 類是Python file 對象的一個簡單封裝,并帶有Django特定的附加功能。需要表示文件的時候,Django內部會使用這個類。
File對象擁有下列屬性和方法:
name
含有MEDIA_ROOT相對路徑的文件名稱。
size
文件的字節(jié)數。
file
這個類所封裝的,原生的file 對象。
mode
文件的讀寫模式。
open([mode=None])
打開或者重新打開文件(同時會執(zhí)行File.seek(0))。 mode參數的值和Python內建的open()相同。
重新打開一個文件時,無論文件原先以什么模式打開,mode都會覆蓋;None的意思是以原先的模式重新打開。
read([num_bytes=None])
讀取文件內容。可選的size參數是要讀的字節(jié)數;沒有指定的話,文件會一直讀到結尾。
__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。
class ContentFile(File)[source]
ContentFile類繼承自File,但是并不像File那樣,它操作字符串的內容(也支持字節(jié)集),而不是一個實際的文件。例如:
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特地為圖像提供了這個內建類。django.core.files.images.ImageFile繼承了 File的所有屬性和方法,并且額外提供了以下的屬性:
width
圖像的像素單位寬度。
height
圖像的像素單位高度。
任何關聯到一個對象(比如下面的Car.photo)的File都會有一些額外的方法:
File.save(name, content[, save=True])
以提供的文件名和內容保存一個新文件。這樣不會替換已存在的文件,但是會創(chuàng)建新的文件,并且更新對象來指向它。如果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 協議發(fā)布,轉載請保留作者署名和文章出處。
Django 文檔協作翻譯小組人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。