python中(zhōng)文版(bǎn)是一种简(jiǎn)单(dān)易(yì)学,功能强(qiáng)大的编(biān)程语言。它包括了高效的高级数(shù)据结(jié)构和简(jiǎn)单而有效的方(fāng)法,面向对(duì)象编程。Python优雅的语法,动态类(lèi)型(xíng),以及它(tā)天(tiān)然(rán)的解释(shì)能(néng)力(lì),使(shǐ)其成为理想的语(yǔ)言,脚(jiǎo)本和应用程序快速(sù)开发在大多数平台上的许多领域。
Python解释器(qì)及其扩展(zhǎn)标(biāo)准库的源码和编译版本可以(yǐ)从Python的Web站点,http://www.python.org/ 所有主要平台(tái)可(kě)自由查看(kàn),并且可以(yǐ)自(zì)由(yóu)发布。该站点上也包含了分配和指针到很多免费的第三(sān)方Python模(mó)块,程序,工具,以及附加的文档。
python中文版的解(jiě)释器很容易扩展新的(de)功能,并(bìng)在C或(huò)C ++(或由C来调用其他语言)实现(xiàn)的(de)数据类型。 Python也很适于作为定制应(yīng)用的一种扩展语言。
有关标(biāo)准对象和模(mó)块的详细(xì)介绍,请参见Python标准库。Python语言参考给出了语言的(de)更正式的定(dìng)义。需要编写C或C + +扩展,请阅读扩展和嵌入Python解释器(qì)和Python/C的(de)API参考手册。也有几本书涵(hán)盖了各个深度的Python。
本(běn)教程并不(bú)试图全(quán)面,涵盖(gài)每(měi)一个功能,甚至每(měi)一(yī)个(gè)常用功能(néng)。相(xiàng)反,它介(jiè)绍(shào)了(le)许多Python中最引人注目的功(gōng)能,会给Python语言的韵味(wèi)和风格是(shì)一个好开始。看完之后,你(nǐ)就可以(yǐ)阅读(dú)和编写Python模(mó)块和程序,将准备进一(yī)步了解Python标准(zhǔn)库描(miáo)述(shù)的各种Python库模块(kuài)。

Python读写文件
1.open
使用open打(dǎ)开文件后(hòu)一定(dìng)要记得调用文件对象的close()方法。比如可以用(yòng)try/finally语句来确保最后能关闭文件。
file_object = open('thefile.txt')
try:
all_the_text = file_object.read( )
finally:
file_object.close( )
注:不(bú)能把open语句(jù)放在try块里,因为(wéi)当打开文件出(chū)现异常(cháng)时,文件对(duì)象file_object无法执行close()方法。
2.读文(wén)件
读文(wén)本文件(jiàn)
input = open('data', 'r')
#第二个参数(shù)默认为r
input = open('data')
读二进制文件
input = open('data', 'rb')
读取所有(yǒu)内容
file_object = open('thefile.txt')
try:
all_the_text = file_object.read( )
finally:
file_object.close( )
读固定字(zì)节
file_object = open('abinfile', 'rb')
try:
while True:
chunk = file_object.read(100)
if not chunk:
break
do_something_with(chunk)
finally:
file_object.close( )
读每行
list_of_all_the_lines = file_object.readlines( )
如果文件是文(wén)本文件,还可以直接遍历文件对象(xiàng)获取每行(háng):
for line in file_object:
process line
3.写文件
写文本文件
output = open('data', 'w')
写二进制(zhì)文件
output = open('data', 'wb')
追加写文件
output = open('data', 'w+')
写数据
file_object = open('thefile.txt', 'w')
file_object.write(all_the_text)
file_object.close( )
写入多行
file_object.writelines(list_of_text_strings)
注意,调用writelines写入多(duō)行在性能上会比使用write一次性(xìng)写入要(yào)高(gāo)。
在处(chù)理日志文件的时候(hòu),常(cháng)常会遇到这样的情况(kuàng):日志文(wén)件巨大,不可能一次性把整(zhěng)个文件读入到内存中进行处理,例如需要在一台物理内存为 2GB 的机器上处(chù)理一个 2GB 的日志文(wén)件(jiàn),我们可(kě)能希望每次只处理其中 200MB 的内容。
在 Python 中,内置的 File 对(duì)象直接提供(gòng)了(le)一个 readlines(sizehint) 函数来完(wán)成这样的事情。以下面的代码为例:
file = open('test.log', 'r')sizehint = 209715200 # 200Mposition = 0lines = file.readlines(sizehint)while not file.tell() - position < 0: position = file.tell() lines = file.readlines(sizehint)
每次调用 readlines(sizehint) 函数,会(huì)返回大约 200MB 的数据,而(ér)且所返回的(de)必然都是(shì)完整(zhěng)的行(háng)数(shù)据,大多数情况(kuàng)下,返回的(de)数据的字节(jiē)数会稍微比 sizehint 指定的值(zhí)大一点(除最后一次调用 readlines(sizehint) 函(hán)数的时候)。通常情况下,Python 会自动将用户指定的 sizehint 的值调(diào)整成(chéng)内(nèi)部(bù)缓存(cún)大小的(de)整数倍。
file在(zài)python是(shì)一个特殊的类型,它(tā)用(yòng)于在python程(chéng)序中对(duì)外部的(de)文件(jiàn)进行(háng)操作(zuò)。在python中一(yī)切(qiē)都是对(duì)象,file也不例外,file有file的方法(fǎ)和(hé)属性。下面先(xiān)来看如何创建一个file对象:
file(name[, mode[, buffering]])
file()函数用(yòng)于创建一个file对象,它(tā)有一个别名叫open(),可能更形象一些,它们(men)是内置函数。来看看它的参数(shù)。它参数都是(shì)以字符(fú)串的(de)形式传递的。name是文件的名字。
mode是打开(kāi)的模式,可选(xuǎn)的值为r w a U,分别代表读(默认) 写 添(tiān)加支持各种换(huàn)行符的模式(shì)。用w或a模式打开文件(jiàn)的话(huà),如果文件不存在(zài),那么就自动创建。此(cǐ)外,用w模式(shì)打开(kāi)一个已经存在的文件(jiàn)时,原有文件的内容会被(bèi)清空,因(yīn)为一开始文件的操作的标记是在文件的(de)开头的,这时候进行(háng)写操作,无疑会把原(yuán)有的(de)内容给抹掉。由(yóu)于历史的(de)原因(yīn),换行符(fú)在不同的系统中有不同模式,比如在 unix中是一个\n,而在windows中是‘\r\n’,用U模(mó)式打开文件,就(jiù)是(shì)支持所有的换行模式,也(yě)就说‘\r’ '\n' '\r\n'都可表示换行,会有一(yī)个tuple用来(lái)存贮这个文件中用到过(guò)的换行符。不(bú)过(guò),虽说换行有多种(zhǒng)模式,读到python中(zhōng)统一用\n代(dài)替。在模式(shì)字符的(de)后面,还可(kě)以加上(shàng)+ b t这两种标识,分别表(biǎo)示可以对(duì)文(wén)件同时进行读写操作和(hé)用二进制模式、文本模式(默认)打开文件。
buffering如果为0表示不进(jìn)行缓(huǎn)冲(chōng);如果为1表示进(jìn)行“行缓冲“;如果是一个大于1的数表示缓冲(chōng)区的(de)大(dà)小,应该是以字节为(wéi)单位的。
file对象有自(zì)己的属性和方法。先来看看file的属性。
closed #标记文(wén)件是(shì)否已经关闭,由(yóu)close()改写(xiě)
encoding #文件编码
mode #打(dǎ)开模式(shì)
name #文件名
newlines #文件中用(yòng)到的(de)换行模式,是一(yī)个tuple
softspace #boolean型,一般为(wéi)0,据说用于print
file的读写(xiě)方法(fǎ):
F.read([size]) #size为读取的长度,以(yǐ)byte为单位
F.readline([size])
#读(dú)一(yī)行,如果(guǒ)定(dìng)义了size,有可(kě)能返回的只是一行(háng)的一(yī)部分
F.readlines([size])
#把文件每(měi)一行作为一(yī)个list的一个成员,并(bìng)返回这个list。其实它(tā)的内部(bù)是通(tōng)过循环调用readline()来实(shí)现的。如果提供size参数,size是表示读取内容的总长,也就(jiù)是说可能只读到文件的一(yī)部(bù)分(fèn)。
F.write(str)
#把str写到文件中,write()并不会在str后加上(shàng)一个换行(háng)符(fú)
F.writelines(seq)
#把seq的内容(róng)全部写到文(wén)件中。这个(gè)函数(shù)也(yě)只是忠实地写入,不会在每行(háng)后面加上任何东(dōng)西。
file的(de)其他方(fāng)法(fǎ):
F.close()
#关闭文件。python会在一个文件不用后(hòu)自(zì)动关闭文(wén)件,不过(guò)这(zhè)一功能没有保证,最好还(hái)是养(yǎng)成自(zì)己关闭的习惯。如果一个文件在关闭后还对其(qí)进(jìn)行操作(zuò)会产生(shēng)ValueError
F.flush()
#把(bǎ)缓冲区(qū)的内容(róng)写(xiě)入硬盘
F.fileno()
#返回一个长整型的”文件(jiàn)标签“
F.isatty()
#文件是否是一个终端设(shè)备文件(jiàn)(unix系统中的)
F.tell()
#返(fǎn)回文(wén)件操作标记的当(dāng)前位置,以文件的(de)开头为原点
F.next()
#返回(huí)下(xià)一行,并将(jiāng)文件操作标记位移到下一(yī)行。把(bǎ)一个file用于for ... in file这(zhè)样的语句(jù)时,就是调用next()函(hán)数来(lái)实现遍历的。
F.seek(offset[,whence])
#将文件(jiàn)打操作标记移到offset的位置。这个offset一般是(shì)相对于文件的(de)开头来计算(suàn)的,一般为正数。但如果提供了whence参(cān)数就不(bú)一定(dìng)了,whence可以为0表示从头(tóu)开始计(jì)算,1表示以当前位置为原点计算。2表示以文件末尾为原点(diǎn)进行计算(suàn)。需要注(zhù)意,如果文(wén)件以a或(huò)a+的模式打开,每次进行写操作(zuò)时,文件操作(zuò)标记(jì)会自动返回到文件末尾(wěi)。
F.truncate([size])
#把文件裁成规定的大小,默认的(de)是裁(cái)到当(dāng)前文件操(cāo)作标记的位(wèi)置(zhì)。如果(guǒ)size比文件的大小还(hái)要大,依据系统的不同可能是不改变(biàn)文件,也可能(néng)是用0把(bǎ)文(wén)件补到(dào)相应的(de)大(dà)小,也可能是以一些随机的内容加上去。