qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          python文件讀寫

          同樣是《python基礎(chǔ)教程(第二版)》的內(nèi)容,只是后面內(nèi)容學(xué)起來,相比前面會(huì)比較有趣,也更加實(shí)用,所以,將“基礎(chǔ)”改為“進(jìn)階”。

          python 電子書分享地址:http://yunpan.cn/Q2U87uGrNiTA3

           

          本節(jié)講文件的操作

          -------------------------------

           

          打開文件

           

          open函數(shù)用來打開文件,語法如下:

          open(name[, mode[,buffering]])

          open函數(shù)使用一個(gè)文件名作為唯一的強(qiáng)制參數(shù),然后返回一個(gè)文件對(duì)象。假設(shè)我要打開我硬盤(I/python/test.txt) 文件,可以用下面方法:

          >>> f = open(r'i:\python\test.txt')

           

          open函數(shù)中模式參數(shù)的常用值

           

           

          基本文件方法

           

          打開文件是第一步,下面就需要對(duì)文件進(jìn)行讀或?qū)懀梢?span style="font-family: 'Times New Roman';">write 和 read方法進(jìn)行讀或?qū)憽?/span>

          復(fù)制代碼
          #寫入文件內(nèi)容 >>> f = open('test.txt','w') >>> f.write('hello,') >>> f.write('world!') >>> f.close()  # 讀取文件內(nèi)容 >>> f = open('test.txt','r') >>> f.read(4)   #讀取前4個(gè)字符 'hell' >>> f.read()   #讀取剩余的所有字符 'o,world!'
          復(fù)制代碼

           

          關(guān)閉文件

            應(yīng)該牢記使用close方法關(guān)閉文件。盡管一個(gè)文件對(duì)象在退出程序后會(huì)自動(dòng)關(guān)閉,但關(guān)閉文件是沒什么害處的,可以避免在某些操作系統(tǒng)或設(shè)置中進(jìn)行無用的修改,這樣做也會(huì)避免用完系統(tǒng)中打開文件的配額。

           

           

          使用基本文件方法

           

          假如test.txt文件包含如下內(nèi)容:

          -----------------------------

          Welcome to this file

          There is nothing here except

          This stupid haiku

          -----------------------------

          下面是基本讀文件的方法:

          復(fù)制代碼
          # read(n) 指定參數(shù) >>> f = open(r'I:\python\test.txt') >>> f.read(7) 'Welcome' >>> f.read(4) ' to ' >>> f.close()  # read() 不指定參數(shù) >>> f = open(r'I:\python\test.txt') >>> print f.read() Welcome to this file There is nothing here except This stupid haiku >>> f.close()  # readline()  >>> f = open(r'I:\python\test.txt') >>> for i in range(3):     print str(i) + ':' + f.readline()       0:Welcome to this file  1:There is nothing here except  2:This stupid haiku >>> f.close()  #readlines() >>> import pprint >>> pprint.pprint(open(r'I:\python\test.txt').readlines()) ['Welcome to this file\n',  'There is nothing here except\n',  'This stupid haiku']
          復(fù)制代碼

          readline返回一行的字符串, readlines返回包含文件所有內(nèi)容的字符串列表每個(gè)元素是一行的字符串

          pprint 模塊的pprint方法將內(nèi)容分成每個(gè)小項(xiàng)單行顯示。

           

          下面是寫文件的基本方法:

          >>> f = open(r'I:\python\test.txt','w')  #默認(rèn)是讀文件,可以不加‘r’,寫文件一定要加’w’ >>> f.write('this\nis no \nhaiku') >>> f.close()

           

          >>> f = open(r'I:\python\test.txt') >>> lines = f.readlines() >>> lines[1] = "isn't a\n" >>> f = open(r'I:\python\test.txt','w') >>> f.writelines(lines) >>> f.close()

           

           

          對(duì)文件內(nèi)容進(jìn)行迭代

           

          1、接字節(jié)處理

          最常見的對(duì)文件內(nèi)容進(jìn)行迭代的方法是while循環(huán)中使用read方法。例如,對(duì)每個(gè)字符進(jìn)行循環(huán),可以用下面方法實(shí)現(xiàn):

          f = open(filename) char = f.read(1) while char:     process(char)     char = f.read(1) f.close()

          read方法返回的字符串會(huì)包含一個(gè)字符,直到文件末尾,read返回一個(gè)空的字符串,char將變?yōu)榧佟?/span>

          可以看到,char = f.read(1) 被重復(fù)地使用,代碼重復(fù)通過被認(rèn)為是一件壞事,看看下面的方法:

          復(fù)制代碼
          f = open(filename)  while True:     char = f.read(1)     if not char: break     process(char) f.close()
          復(fù)制代碼

          這里break語句被頻繁的使用(這樣會(huì)讓代碼比較難懂),盡管如此,但它仍然要比前面的方法好。

           

          2、讀取所有內(nèi)容

          如果文件不是很大,那么可以使用不帶參數(shù)的read方法一次讀取整個(gè)文件,或者使用readlines方法。

          復(fù)制代碼
          #用read迭代每個(gè)字符 f = open(filename) for char in f.read():     process(char) f.close() 
          #用readlines迭代行: f = open(filename) for line in f.readlines(): process(line) f.close()
          復(fù)制代碼

           

          3、用fileinput 來進(jìn)行迭代

          fileinput模塊包含了打開文件的函數(shù),,只需要傳一個(gè)文件名給它

          import fileinput for line in fileinput.input(filename):     process(line)

           

          4、文件迭代器

          好吧!這是python2.2之后才有的方法,如果它一開始就有,上面的方法也許就不存在了。文件對(duì)象是可以迭代的,這就意味著可以直接在for循環(huán)中對(duì)他們進(jìn)行迭代

          f = open(filename) for line in f:     process(line) f.close()

           

           

          再來看下面例子:

          復(fù)制代碼
          >>> f = open(r'I:\python\test.txt','w') >>> f.write('First line\n') >>> f.write('Second line\n') >>> f.write('Third line\n') >>> f.close() >>> lines = list(open(r'I:\python\test.txt')) >>> lines ['First line\n', 'Second line\n', 'Third line\n'] >>> first,second,third = open(r'I:\python\test.txt') >>> first 'First line\n' >>> second 'Second line\n' >>> third 'Third line\n'
          復(fù)制代碼

          在這個(gè)例子中:

           

          •  使用序列來對(duì)一個(gè)打開的文件進(jìn)行解包操作,把每行都放入一個(gè)單獨(dú)的變理中,這么做是很有實(shí)用性的,因?yàn)橐话悴恢牢募杏卸嗌傩校菔镜奈募?#8220;迭代性”。
          •  在寫文件后一定要關(guān)閉文件,這樣才能確保數(shù)據(jù)被更新到硬盤。

           

          posted on 2014-02-20 11:46 順其自然EVO 閱讀(246) 評(píng)論(0)  編輯  收藏 所屬分類: python

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 浑源县| 安化县| 北辰区| 金湖县| 博湖县| 龙海市| 兴和县| 邻水| 二手房| 怀化市| 城步| 湟源县| 大余县| 康平县| 朝阳市| 海盐县| 乌审旗| 鞍山市| 库尔勒市| 林西县| 大荔县| 志丹县| 延津县| 定远县| 城固县| 内江市| 辉南县| 萨嘎县| 如皋市| 东乌珠穆沁旗| 夏邑县| 昌江| 瑞金市| 大渡口区| 长岭县| 鄱阳县| 盐源县| 若尔盖县| 迁安市| 文水县| 二连浩特市|