欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 文件操作的詳解及實(shí)例

 更新時(shí)間:2017年09月18日 15:11:28   作者:ElijahYang  
這篇文章主要介紹了Python 文件操作的詳解及實(shí)例的相關(guān)資料,希望通過(guò)本文大家能夠理解掌握Python 文件操作的知識(shí),需要的朋友可以參考下

Python 文件操作的詳解及實(shí)例

一、文件操作

1、對(duì)文件操作流程

  • 打開文件,得到文件句柄并賦值給一個(gè)變量
  • 通過(guò)句柄對(duì)文件進(jìn)行操作
  • 關(guān)閉文件

現(xiàn)有文件如下:

昨夜寒蛩不住鳴。
驚回千里夢(mèng),已三更。
起來(lái)獨(dú)自繞階行。
人悄悄,簾外月朧明。
白首為功名,舊山松竹老,阻歸程。
欲將心事付瑤琴。
知音少,弦斷有誰(shuí)聽。

f = open('小重山') #打開文件
data=f.read()#獲取文件內(nèi)容
f.close() #關(guān)閉文件

注意:if in the win,hello文件是utf8保存的,打開文件時(shí)open函數(shù)是通過(guò)操作系統(tǒng)打開的文件,而win操作系統(tǒng)默認(rèn)的是gbk編碼,所以直接打開會(huì)亂碼,需要f=open(‘hello',encoding='utf8'),hello文件如果是gbk保存的,則直接打開即可。

2、文件打開模式  

Character Meaning

'r'    open for reading (default)
'w'    open for writing, truncating the file first
'x'    create a new file and open it for writing
'a'    open for writing, appending to the end of the file if it exists
'b'    binary mode
't'    text mode (default)
'+'    open a disk file for updating (reading and writing)
'U'    universal newline mode (deprecated)

先介紹三種最基本的模式:

# f = open('小重山2','w') #打開文件
# f = open('小重山2','a') #打開文件
# f.write('莫等閑1\n')
# f.write('白了少年頭2\n')
# f.write('空悲切!3')

3、文件具體操作

f = open('小重山') #打開文件
# data1=f.read()#獲取文件內(nèi)容
# data2=f.read()#獲取文件內(nèi)容
#
# print(data1)
# print('...',data2)
# data=f.read(5)#獲取文件內(nèi)容

# data=f.readline()
# data=f.readline()
# print(f.__iter__().__next__())
# for i in range(5):
#   print(f.readline())

# data=f.readlines()

# for line in f.readlines():
#   print(line)


# 問題來(lái)了:打印所有行,另外第3行后面加上:'end 3'
# for index,line in enumerate(f.readlines()):
#   if index==2:
#     line=''.join([line.strip(),'end 3'])
#   print(line.strip())

#切記:以后我們一定都用下面這種
# count=0
# for line in f:
#   if count==3:
#     line=''.join([line.strip(),'end 3'])
#   print(line.strip())
#   count+=1

# print(f.tell())
# print(f.readline())
# print(f.tell())#tell對(duì)于英文字符就是占一個(gè),中文字符占三個(gè),區(qū)分與read()的不同.
# print(f.read(5))#一個(gè)中文占三個(gè)字符
# print(f.tell())
# f.seek(0)
# print(f.read(6))#read后不管是中文字符還是英文字符,都統(tǒng)一算一個(gè)單位,read(6),此刻就讀了6個(gè)中文字符

#terminal上操作:
f = open('小重山2','w')
# f.write('hello \n')
# f.flush()
# f.write('world')

# 應(yīng)用:進(jìn)度條
# import time,sys
# for i in range(30):
#   sys.stdout.write("*")
#   # sys.stdout.flush()
#   time.sleep(0.1)

# f = open('小重山2','w')
# f.truncate()#全部截?cái)?
# f.truncate(5)#全部截?cái)?

# print(f.isatty())
# print(f.seekable())
# print(f.readable())

f.close() #關(guān)閉文件

接下來(lái)我們繼續(xù)擴(kuò)展文件模式:

# f = open('小重山2','w') #打開文件
# f = open('小重山2','a') #打開文件
# f.write('莫等閑1\n')
# f.write('白了少年頭2\n')
# f.write('空悲切!3')


# f.close()

#r+,w+模式
# f = open('小重山2','r+') #以讀寫模式打開文件
# print(f.read(5))#可讀
# f.write('hello')
# print('------')
# print(f.read())


# f = open('小重山2','w+') #以寫讀模式打開文件
# print(f.read(5))#什么都沒有,因?yàn)橄雀袷交宋谋?
# f.write('hello alex')
# print(f.read())#還是read不到
# f.seek(0)
# print(f.read())

#w+與a+的區(qū)別在于是否在開始覆蓋整個(gè)文件


# ok,重點(diǎn)來(lái)了,我要給文本第三行后面加一行內(nèi)容:'hello 岳飛!'
# 有同學(xué)說(shuō),前面不是做過(guò)修改了嗎? 大哥,剛才是修改內(nèi)容后print,現(xiàn)在是對(duì)文件進(jìn)行修改!!!
# f = open('小重山2','r+') #以寫讀模式打開文件
# f.readline()
# f.readline()
# f.readline()
# print(f.tell())
# f.write('hello 岳飛')
# f.close()
# 和想的不一樣,不管事!那涉及到文件修改怎么辦呢?

# f_read = open('小重山','r') #以寫讀模式打開文件
# f_write = open('小重山_back','w') #以寫讀模式打開文件

# count=0
# for line in f_read:
  # if count==3:
  #   f_write.write('hello,岳飛\n')
  #
  # else:
  #   f_write.write(line)


  # another way:
  # if count==3:
  #
  #   line='hello,岳飛2\n'
  # f_write.write(line)
  # count+=1

# #二進(jìn)制模式
# f = open('小重山2','wb') #以二進(jìn)制的形式讀文件
# # f = open('小重山2','wb') #以二進(jìn)制的形式寫文件
# f.write('hello alvin!'.encode())#b'hello alvin!'就是一個(gè)二進(jìn)制格式的數(shù)據(jù),只是為了觀看,沒有顯示成010101的形式

注意1: 無(wú)論是py2還是py3,在r+模式下都可以等量字節(jié)替換,但沒有任何意義的! 

注意2:有同學(xué)在這里會(huì)用readlines得到內(nèi)容列表,再通過(guò)索引對(duì)相應(yīng)內(nèi)容進(jìn)行修改,最后將列表重新寫會(huì)該文件。

這種思路有一個(gè)很大的問題,數(shù)據(jù)若很大,你的內(nèi)存會(huì)受不了的,而我們的方式則可以通過(guò)迭代器來(lái)優(yōu)化這個(gè)過(guò)程?!?/p>

補(bǔ)充:rb模式以及seek

在py2中:

#昨夜寒蛩不住鳴.

f = open('test','r',) #以寫讀模式打開文件

f.read(3)

# f.seek(3)
# print f.read(3) # 夜

# f.seek(3,1)
# print f.read(3) # 寒

# f.seek(-4,2)
# print f.read(3) # 鳴

在py3中:

# test: 
昨夜寒蛩不住鳴.

f = open('test','rb',) #以寫讀模式打開文件

f.read(3)

# f.seek(3)
# print(f.read(3)) # b'\xe5\xa4\x9c'

# f.seek(3,1)
# print(f.read(3)) # b'\xe5\xaf\x92'

# f.seek(-4,2)
# print(f.read(3))  # b'\xe9\xb8\xa3'

#總結(jié): 在py3中,如果你想要字符數(shù)據(jù),即用于觀看的,則用r模式,這樣我f.read到的數(shù)據(jù)是一個(gè)經(jīng)過(guò)decode的
#   unicode數(shù)據(jù); 但是如果這個(gè)數(shù)據(jù)我并不需要看,而只是用于傳輸,比如文件上傳,那么我并不需要decode
#   直接傳送bytes就好了,所以這個(gè)時(shí)候用rb模式.

#   在py3中,有一條嚴(yán)格的線區(qū)分著bytes和unicode,比如seek的用法,在py2和py3里都是一個(gè)個(gè)字節(jié)的seek,
#   但在py3里你就必須聲明好了f的類型是rb,不允許再模糊.

#建議: 以后再讀寫文件的時(shí)候直接用rb模式,需要decode的時(shí)候仔顯示地去解碼.

4、with語(yǔ)句

為了避免打開文件后忘記關(guān)閉,可以通過(guò)管理上下文,即:

with open('log','r') as f:
    pass

如此方式,當(dāng)with代碼塊執(zhí)行完畢時(shí),內(nèi)部會(huì)自動(dòng)關(guān)閉并釋放文件資源。

在Python 2.7 后,with又支持同時(shí)對(duì)多個(gè)文件的上下文進(jìn)行管理,即:

with open('log1') as obj1, open('log2') as obj2:
  pass2

如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • python實(shí)現(xiàn)Android與windows局域網(wǎng)文件夾同步

    python實(shí)現(xiàn)Android與windows局域網(wǎng)文件夾同步

    這篇文章主要給大家詳細(xì)介紹了python實(shí)現(xiàn)Android與windows局域網(wǎng)文件夾同步,文中有詳細(xì)的代碼示例和圖文介紹,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Python對(duì)象的深拷貝和淺拷貝詳解

    Python對(duì)象的深拷貝和淺拷貝詳解

    這篇文章主要介紹了Python對(duì)象的深拷貝和淺拷貝詳解,本文從Python核心編程2書中摘錄而來(lái),總結(jié)的比較精辟,需要的朋友可以參考下
    2014-08-08
  • Python如何優(yōu)雅獲取本機(jī)IP方法

    Python如何優(yōu)雅獲取本機(jī)IP方法

    這篇文章主要介紹了Python如何優(yōu)雅獲取本機(jī)IP方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • python zip()函數(shù)的使用示例

    python zip()函數(shù)的使用示例

    這篇文章主要介紹了python zip()的使用示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • Python實(shí)現(xiàn)亂序文件重新命名編號(hào)

    Python實(shí)現(xiàn)亂序文件重新命名編號(hào)

    這篇文章主要為大家詳細(xì)介紹一下Python的一個(gè)神操作,那就是實(shí)現(xiàn)亂序文件重新命名編號(hào)功能,文中的示例代碼講解詳細(xì),感興趣的可以嘗試一下
    2022-08-08
  • django框架使用orm實(shí)現(xiàn)批量更新數(shù)據(jù)的方法

    django框架使用orm實(shí)現(xiàn)批量更新數(shù)據(jù)的方法

    這篇文章主要介紹了django框架使用orm實(shí)現(xiàn)批量更新數(shù)據(jù)的方法,結(jié)合實(shí)例形式簡(jiǎn)單分析了Django基于orm操作數(shù)據(jù)庫(kù)更新數(shù)據(jù)的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-06-06
  • python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(四):域名系統(tǒng)

    python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(四):域名系統(tǒng)

    當(dāng)我們?cè)谏暇W(wǎng)的時(shí)候,通常輸入的是網(wǎng)址,其實(shí)這就是一個(gè)域名,而我們計(jì)算機(jī)網(wǎng)絡(luò)上的計(jì)算機(jī)彼此之間只能用IP地址才能相互識(shí)別
    2014-06-06
  • 淺析Python 抽象工廠模式的優(yōu)缺點(diǎn)

    淺析Python 抽象工廠模式的優(yōu)缺點(diǎn)

    這篇文章主要介紹了Python 抽象工廠模式的優(yōu)缺點(diǎn),文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • asyncio 的 coroutine對(duì)象 與 Future對(duì)象使用指南

    asyncio 的 coroutine對(duì)象 與 Future對(duì)象使用指南

    asyncio是Python 3.4版本引入的標(biāo)準(zhǔn)庫(kù),直接內(nèi)置了對(duì)異步IO的支持。asyncio的編程模型就是一個(gè)消息循環(huán)。今天我們就來(lái)詳細(xì)討論下asyncio 中的 coroutine 與 Future對(duì)象
    2016-09-09
  • 層次分析法在matlab上的實(shí)現(xiàn)方式

    層次分析法在matlab上的實(shí)現(xiàn)方式

    這篇文章主要介紹了層次分析法在matlab上的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論