国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解Python中的文件操作

2020-01-04 17:24:59
字體:
供稿:網(wǎng)友

1.能調(diào)用方法的一定是對(duì)象,比如數(shù)值、字符串、列表、元組、字典,甚至文件也是對(duì)象,Python中一切皆為對(duì)象。

 str1 = 'hello' str2 = 'world' str3 = ' '.join([str1,str2]) print(str3)

2.三種基本的文件操作模式:r(only-read)、w(only-write)、a(append)

對(duì)文件進(jìn)行操作的流程:

     第一,建立文件對(duì)象。

     第二,調(diào)用文件方法進(jìn)行操作。

     第三,不要忘了關(guān)閉文件。(文件不關(guān)閉的情況下,內(nèi)容會(huì)放在緩存,雖然Python會(huì)在最后自動(dòng)把內(nèi)容讀到磁盤,但為了以防萬一,要養(yǎng)成關(guān)閉文件的習(xí)慣)

文件file1

一張褪色的照片,好像帶給我一點(diǎn)點(diǎn)懷念。巷尾老爺爺賣的熱湯面,味道彌漫過舊舊的后院;流浪貓睡熟在搖晃秋千,夕陽照了一遍他咪著眼;那張同桌寄的明信片,安靜的躺在課桌的里面。

(1)r模式

在只讀模式下寫入內(nèi)容會(huì)報(bào)錯(cuò)。

 f = open('file1','r') f_read = f.read()   #read是逐字符地讀取,read可以指定參數(shù),設(shè)定需要讀取多少字符,無論一個(gè)英文字母還是一個(gè)漢字都是一個(gè)字符。 print(f_read) f.close()
 f = open('file1','r') f_read = f.readline() #readline只能讀取第一行代碼,原理是讀取到第一個(gè)換行符就停止。 print(f_read) f.close()
 f = open('file1','r') f_read = f.readlines() #readlines會(huì)把內(nèi)容以列表的形式輸出。 print(f_read) f.close()
 f = open('file1','r') for line in f.readlines() #使用for循環(huán)可以把內(nèi)容按字符串輸出。   print(line) #輸出一行內(nèi)容輸出一個(gè)空行,一行內(nèi)容一行空格... 因?yàn)槲募忻啃袃?nèi)容后面都有一個(gè)換行符,而且print()語句本身就可以換行,如果不想輸出空行,就需要使用下面的語句:print(line.strip()) f.close()

(2)w模式

在進(jìn)行操作前,文件中所有內(nèi)容會(huì)被清空。比如在file1中寫入'hello world',程序執(zhí)行后file1中就只剩下一句'hello world'

 f = open('file1','w',encoding='utf8')  #由于Python3的默認(rèn)編碼方式是Unicode,所以在寫入文件的時(shí)候需要調(diào)用utf8,以u(píng)tf8的方式保存,這時(shí)pycharm(默認(rèn)編碼方式是utf8)才能正確讀取,當(dāng)讀取文件時(shí),文件是utf8格式,pycharm也是utf8,就不需要調(diào)用了。 f_w = f.write('hello world') print(f_w)  #有意思的是,這里并不打印'hello world',只打印寫入多少字符 f.close()

(3)a模式

與w模式不同的是,a模式不會(huì)把原來內(nèi)容清空,而是光標(biāo)移到內(nèi)容最后位置,繼續(xù)寫入新內(nèi)容。比如在最后追加'hello world'

 f = open('file1','a') f_a = f.write('hello world') print(f_a) #還是會(huì)打印寫入的字符數(shù) f.close()

打印文件,在'流浪貓睡熟在搖晃秋千'后面加上'helloworld'輸出

在r模式時(shí),我們說過用for循環(huán)和readlines()輸出文件內(nèi)容,這種輸出內(nèi)容的原理是:打開文件,把全部?jī)?nèi)容讀入內(nèi)存,然后再打印輸入,當(dāng)文件很大時(shí),這種讀取方式就不靠譜了,甚至?xí)箼C(jī)器崩潰。我們需要及時(shí)關(guān)閉文件,如下:

f = open('file','r')data=f.readlines()  #注意及時(shí)關(guān)閉文件f.close()num = 0for i in data:  num += 1  if num == 5:    i = ''.join([i.strip(),'hello world']) #不要使用“+”進(jìn)行拼接  print(i.strip())f.close()

對(duì)于大數(shù)據(jù)文件,要使用下面的方法:

num = 0f.close()  #不要過早關(guān)閉文件,否則程序不能識(shí)別操作句柄f.f = open('file','r')for i in f:  #for內(nèi)部把f變?yōu)橐粋€(gè)迭代器,用一行取一行。  num += 1  if num == 5:    i = ''.join([i.strip(),'hello world'])  print(i.strip())f.close()

3.tell和seek

     tell:查詢文件中光標(biāo)位置

     seek:光標(biāo)定位

f = open('file','r')print(f.tell())  #光標(biāo)默認(rèn)在起始位置f.seek(10)    #把光標(biāo)定位到第10個(gè)字符之后print(f.tell())  #輸出10f.close()----------------------f = open('file','w')print(f.tell())  #先清空內(nèi)容,光標(biāo)回到0位置f.seek(10)    print(f.tell())f.close()----------------------f = open('file','a')print(f.tell())  #光標(biāo)默認(rèn)在最后位置f.write('你好 世界')print(f.tell())  #光標(biāo)向后9個(gè)字符,仍在最后位置f.close()

4.flush 同步將數(shù)據(jù)從緩存轉(zhuǎn)移到磁盤

示例,實(shí)現(xiàn)進(jìn)度條功能

import sys,time  #導(dǎo)入sys和time模塊for i in range(40):  sys.stdout.write('*')  sys.stdout.flush()  #flush的作用相當(dāng)于照相,拍一張沖洗一張  time.sleep(0.2)下面代碼也能夠?qū)崿F(xiàn)相同的功能import time for i in range(40):  print('*',end='',flush=True) #print中的flush參數(shù)  time.sleep(0.2)

5.truncate 截?cái)?/strong>

不能是r模式下執(zhí)行,

w模式下,已經(jīng)清空所有數(shù)據(jù),使用truncate沒有任何意義,

a模式下,截?cái)嘀付ㄎ恢煤蟮膬?nèi)容。

 f = open('file','a') f.truncate(6) #只顯示6個(gè)字節(jié)的內(nèi)容(6個(gè)英文字符或三個(gè)漢字),后面的內(nèi)容被清空。

6.光標(biāo)位置總結(jié)

一個(gè)漢字兩個(gè)字節(jié),涉及光標(biāo)位置的方法有4個(gè):readtellseektruncate

#--------------------------光標(biāo)總結(jié)head-----------------------------------f = open('file','r')print(f.read(6)) #6個(gè)字符print(f.tell())  #位置12字節(jié),一個(gè)漢字兩個(gè)字節(jié)f.close()f = open('file','r')f.seek(6)      #6個(gè)字節(jié)print(f.tell())f.close()f = open('file','a')print(f.tell())  #光標(biāo)默認(rèn)在最后位置f.write('你好 世界')print(f.tell())  #光標(biāo)向后9個(gè)字節(jié),一個(gè)漢字兩個(gè)字節(jié),仍在最后位置 182-->191f.close()f = open('file','a',encoding='utf-8')print(f.truncate(6)) #由于需要光標(biāo)定位位置,所以也是字節(jié)。只顯示6個(gè)字節(jié)的內(nèi)容(6個(gè)英文字母或三個(gè)漢字,一個(gè)漢字兩個(gè)字節(jié)),后面的內(nèi)容被清空。f.close()#-----------------------------光標(biāo)總結(jié)end---------------------------------

7.另外3種模式:r+、w+、a+

      r+:讀寫模式,光標(biāo)默認(rèn)在起始位置,當(dāng)需要寫入的時(shí)候,光標(biāo)自動(dòng)移到最后

     w+:寫讀模式,先清空原內(nèi)容,再寫入,也能夠讀取

     a+:追加讀模式,光標(biāo)默認(rèn)在最后位置,直接寫入,也能夠讀取。

f = open('file','a')print(f.tell())  #末尾207位置f.close()f = open('file','r+')print(f.tell())  #0位置print(f.readline()) #讀取第一行f.write('羊小羚')   #光標(biāo)移到末尾207位置并寫入print(f.tell())  #213位置f.seek(0)     #光標(biāo)移到0位置print(f.readline())  #讀取第一行f.close()

8.修改文件內(nèi)容

思路:由于數(shù)據(jù)存儲(chǔ)機(jī)制的關(guān)系,我們只能把文件1中的內(nèi)容讀取出來,經(jīng)過修改后,放到文件2中。

f2 = open('file2','w',encoding='utf8')  #寫入的時(shí)候必須加utf8f1 = open('file','r')num = 0for line in f1: #迭代器  num += 1  if num == 5:    line = ''.join([line.strip(),'羊小羚/n'])  #里面就是對(duì)字符串進(jìn)行操作了  f2.write(line)f1.close()f2.close()

9.with語句

可以同時(shí)對(duì)多個(gè)文件同時(shí)操作,當(dāng)with代碼塊執(zhí)行完畢時(shí),會(huì)自動(dòng)關(guān)閉文件釋放內(nèi)存資源,不用特意加f.close() ,我們通過下面的示例體會(huì)with的用法和好處。

with語句重寫8中的代碼

 

num = 0with open('file','r') as f1,open('file2','w',encoding='utf8') as f2:  for line in f1:    num += 1    if num == 5:      line = ''.join([line.strip(),'羊小羚'])    f2.write(line)

10.總結(jié)

以上就是這篇文章的全部?jī)?nèi)容,希望對(duì)大家能有所幫助。如果有疑問可以留言交流

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 长宁县| 虎林市| 宿州市| 洞头县| 进贤县| 岳普湖县| 六安市| 墨江| 亚东县| 牡丹江市| 雅江县| 乌鲁木齐县| 云霄县| 凤冈县| 新和县| 循化| 屏山县| 垦利县| 湛江市| 凌云县| 富阳市| 乌鲁木齐县| 图木舒克市| 宣恩县| 宝清县| 紫金县| 梁河县| 莱西市| 集安市| 建瓯市| 芜湖市| 友谊县| 呼图壁县| 广宗县| 邢台市| 会同县| 东平县| 鞍山市| 肥西县| 怀宁县| 雅江县|