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

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