【轉】Python文件讀寫


轉至:http://pmghong.blog.51cto.com/3221425/1349978

一、文件打開/讀取/關閉

>>> f = open(r"E:\python\fileIO\test.txt")
>>> f
<_io.TextIOWrapper name='E:\\python\\fileIO\\test.txt' mode='r' encoding='cp936'>
>>> f.read()
'Hi everyone!\nWhat a good day it is!'

>>> f.close()

二、文件寫入

步驟:以寫入的形式打開--》寫入--》(保存)關閉

不能直接寫入數據,因為默認打開的文件時‘r’的只讀形式

>>> f = open(r"E:\python\fileIO\test.txt")

>>> f.write('nice to meet you!')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
io.UnsupportedOperation: not writable


指定可寫模式:

 

>>> f = open(r"E:\python\fileIO\test.txt","w")
>>> f.write('nice to meet you!')

 

 

此時數據只是寫到緩存中,並未保存到文件,下面輸入就可以看出了,原先的文件內容已經被清空了

$ cat E:/python/fileIO/test.txt
$

關閉這個文件即可將緩存中的數據寫入到文件中

$ cat E:/python/fileIO/test.txt

nice to meet you!

注意:這一步需要相當慎重,因為如果編輯的文件存在的話,這一步操作會先清空這個文件再重新寫入。那么如果不要清空文件再寫入該如何做呢?

使用r+ 模式不會先清空,但是會替換掉原先的文件

>>> f.close()
>>> f = open(r"E:\python\fileIO\test.txt","r+")
>>> f.write("being")
>>> f.close()

$ cat E:/python/fileIO/test.txt
beingto meet you!

可以看到,如果在寫之前先讀取一下文件,再進行寫入,則寫入的數據會添加到文件末尾而不會替換掉原先的文件。這是因為指針引起的,r+ 模式的指針默認是在文件的開頭,如果直接寫入,則會覆蓋源文件,通過read() 讀取文件后,指針會移到文件的末尾,再寫入數據就不會有問題了。這里也可以使用a 模式

>>> f = open(r"E:\python\fileIO\test.txt","r+")
>>> f.read()
'\nbygto meet you!'
>>> f.write('nice to meet you!')
>>> f.close()

$ cat E:/python/fileIO/test.txt

bygto meet you!nice to meet you!

其他模式的介紹。見表

模式

描述

r

以讀方式打開文件,可讀取文件信息。

w

以寫方式打開文件,可向文件寫入信息。如文件存在,則清空該文件,再寫入新內容

a

以追加模式打開文件(即一打開文件,文件指針自動移到文件末尾),如果文件不存在則創建

r+

以讀寫方式打開文件,可對文件進行讀和寫操作。

w+

消除文件內容,然后以讀寫方式打開文件。

a+

以讀寫方式打開文件,並把文件指針移到文件尾。

b

以二進制模式打開文件,而不是以文本模式。該模式只對Windows或Dos有效,類Unix的文件是用二進制模式進行操作的。

 

 文件對象的方法:

1、f.readline()逐行讀取數據

方法一

>>> f = open(r"E:\python\fileIO\test.txt")
>>> f.readline()
'nice to meet you!nice to meet you!\n'
>>> f.readline()
'nice to meet you!\n'
>>> f.readline()
'nice to meet you!\n'
>>> f.readline()
'nice to meet you!1\n'
>>> f.readline()
'nice to meet you!2'
>>> f.readline()
''

方法二

>>> for i in open(r'e:\python\fileIO\test.txt'):
... print(i)
...
nice to meet you!nice to meet you!

nice to meet you!

nice to meet you!

nice to meet you!1

nice to meet you!2

2、f.readlines()     將文件內容以列表的形式存放

>>> f = open("e:/python/fileIO/test.txt")
>>> f.readlines()
['nice to meet you!nice to meet you!\n', 'nice to meet you!\n', 'nice to meet yo
u!\n', 'nice to meet you!1\n', 'nice to meet you!2']
>>> f.close()

f.next()   逐行讀取數據,和f.readline() 相似,唯一不同的是,f.readline() 讀取到最后如果沒有數據會返回空,而f.next() 沒讀取到數據則會報錯(python 3.X中enerator【有yield關鍵字的函數則會被識別為generator函數【中的next變為__next__了)

>>> f = open('e:/python/fileIO/test.txt')
>>> f.next()
'nice to meet you!nice to meet you!\n'
>>> f.next()
'nice to meet you!\n'
>>> f.next()
'nice to meet you!\n'
>>> f.next()
'nice to meet you!1\n'
>>> f.next()
'nice to meet you!2'
>>> f.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration

f.writelines()   多行寫入

>>> l = ['\nhello one!','\nhello two','\nhello three']
>>> f = open("e:/python/fileIO/test.txt",'a')
>>> f.writelines(l)
>>> f.close()

$ cat E:/python/fileIO/test.txt

hello one!
hello two
hello three

f.seek(偏移量,選項)

f.seek(偏移量,選項)
選項=0,表示將文件指針指向從文件頭部到“偏移量”字節處
選項=1,表示將文件指針指向從文件的當前位置,向后移動“偏移量”字節
選項=2,表示將文件指針指向從文件的尾部,向前移動“偏移量”字節
 偏移量:正數表示向右偏移,負數表示向左偏移

>>> f = open('e:/python/fileIO/test.txt','r+')
>>> f.seek(0,2)
36
>>> f.readline()
''
>>> f.seek(0,0)
0
>>> f.readline()
'\n'
>>> f.readline()
'hello one!\n'
>>> f.readline()
'hello two\n'
>>> f.readline()
'hello three'
>>> f.readline()
''

f.flush()    將修改寫入到文件中(無需關閉文件)

>>> f.write('\nhello python!')
14
>>> f.flush()

f.tell()   獲取指針位置

>>> f.seek(0,0)
0
>>> f.readline()
'\n'
>>> f.tell()
2
>>> f.readline()
'hello one!\n'
>>> f.tell()
14

內容查找和替換

一、內容查找

實例:統計文件中hello個數

思路:打開文件,遍歷文件內容,通過正則表達式匹配關鍵字,統計匹配個數。

方法一

import re
f = open('e:/python/fileIO/test.txt')
source = f.read()
f.close()
r = r'hello'
s = len(re.findall(r,source))
for i in re.findall(r,source):
  print (i)
print(s)

方法二、

fp = open('e:/python/fileIO/test.txt','r')
count = 0
for s in fp.readlines():
  li = re.findall('hello',s)
  if len(li)>0:
    count = count +len(li)
print("search",count,"hello")
fp.close()

二、替換

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM