python如何對(duì)文件進(jìn)行操作-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)python如何對(duì)文件進(jìn)行操作,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

目前成都創(chuàng)新互聯(lián)公司已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、向陽(yáng)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

首先看看在pycharm輸入文件句柄,怎樣顯示他的定義

f = open('student_msg', encoding='utf-8', mode='a+')  # 打開一個(gè)文件,賦值給f

print(type(f), f) # f文件句柄是屬于一個(gè)類叫<class '_io.TextIOWrapper'>,也是可迭代對(duì)象。(io ---> input and out)

print(dir(f))  # 打印這個(gè)類的所有屬性和方法

['_CHUNK_SIZE', 'class', 'del', 'delattr', 'dict', 'dir', 'doc', 'enter', 'eq', 'exit', 'format', 'ge', 'getattribute', 'getstate', 'gt', 'hash', 'init', 'init_subclass', 'iter', 'le', 'lt', 'ne', 'new', 'next', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'reconfigure', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'write_through', 'writelines']

print(f.dict)  # f 這個(gè)實(shí)例化對(duì)象中的屬性 {'mode': 'a+'}

源碼對(duì)其的解釋定義
'''
========= ===============================================================
Character Meaning


'r'       open for reading (default)  默認(rèn)只讀
'w'       open for writing, truncating the file first  首先把文件截?cái)啵ㄈ珓h了)
'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  二進(jìn)制模式,打開圖片或者非文本格式時(shí)
't'       text mode (default)  默認(rèn)讀取文本
'+'       open a disk file for updating (reading and writing)  可讀可寫
========= ===============================================================

'''
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
文件的操作使用的頻率還是很高,這幾種方法很容易弄混,為了避免以后出現(xiàn)偏差,現(xiàn)在我把幾種常用的方法整理透。
一,.readline() 和 .readlines() 目的是瀏覽,查找文件中的內(nèi)容用什么模式。先看用六種方式執(zhí)行的結(jié)果。
在register文件中有以下內(nèi)容,看下分別執(zhí)行這六種方式返回的結(jié)果
”’
這些是文件中的內(nèi)容
dumingjun
mickle|male
”’

mode='r'

with open('register', encoding='utf-8', mode='r') as f:
print(f.readline())
print(f.readlines())

運(yùn)行結(jié)果:(文件中內(nèi)容無(wú)變化)

'''
這些是文件中的內(nèi)容

['dumingjun\n', 'mickle|male']
'''

mode='r+'

with open('register', encoding='utf-8', mode='r+') as f:
print(f.readline())
print(f.readlines())

運(yùn)行結(jié)果:(文件中內(nèi)容無(wú)變化)

'''
這些是文件中的內(nèi)容   # 先讀了一行

['dumingjun\n', 'mickle|male']  # 然后往下執(zhí)行,把每行作為一個(gè)字符串放入列表這個(gè)容器中,換行符為\n
'''

mode='w'

with open('register', encoding='utf-8', mode='w') as f:
print(f.readline())
print(f.readlines())

運(yùn)行結(jié)果:(文件中已經(jīng)沒有內(nèi)容了)

'''
Traceback (most recent call last):
print(f.readline())
io.UnsupportedOperation: not readable  # 報(bào)錯(cuò)原因:’w‘模式是無(wú)法讀的,只要看到’w‘,先把文件全清空
'''

mode='w+'

with open('register', encoding='utf-8', mode='w+') as f:
print(f.readline())
print(f.readlines())

運(yùn)行結(jié)果:(文件內(nèi)容已經(jīng)為空)

'''

先清空,然后接下來(lái)執(zhí)行了f.readline() 由于為空,所以返回了空的字符

[]   # 接下來(lái)執(zhí)行f.readlines(), 返回一個(gè)空列表
'''

mode='a'

with open('register', encoding='utf-8', mode='a') as f:
print(f.readline())
print(f.readlines())

運(yùn)行結(jié)果:(文件內(nèi)容不變)

'''
Traceback (most recent call last):
print(f.readline())
io.UnsupportedOperation: not readable  # 報(bào)錯(cuò)原因,’a‘模式只能add,增加,不可讀,因?yàn)椤痑'模式進(jìn)去時(shí)光標(biāo)自動(dòng)放在文件的末尾。
'''

mode='a+'

with open('register', encoding='utf-8', mode='a+') as f:
print(f.readline())
print(f.readlines())

運(yùn)行結(jié)果:(文件內(nèi)容不變)

'''

因?yàn)楣鈽?biāo)是放在最后,所以讀取的內(nèi)容為空

[]   # 同理redlines()返回的是一個(gè)空列表。
'''
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
以上代碼的內(nèi)容顯示在圖片上:
這里寫圖片描述
這里寫圖片描述
這里寫圖片描述
總結(jié)
這里寫圖片描述
閱讀,查找相關(guān)內(nèi)容,只能用‘r’或 ‘r+’模式

二 現(xiàn)在要新建一個(gè)文件,并且添加內(nèi)容,先看看五種方法運(yùn)行的結(jié)果

'''
創(chuàng)建名為'msg'的文件,并寫入內(nèi)容以下內(nèi)容:
’Duminjun is swimming\n今晚吃雞‘
'''

r模式就不用試了,r只能讀,試試r+模式

with open('msg9', encoding='utf-8', mode='r') as f:

f.write('Duminjun is swimming\n今晚吃雞')

運(yùn)行結(jié)果:

'''
Traceback (most recent call last):
with open('msg', encoding='utf-8', mode='r+') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'msg'  # 沒有名為‘msg’的文件,證明r+模式不可添加文件
'''

a 模式

with open('msg', encoding='utf-8', mode='a') as f:

f.write('Duminjun is swimming\n今晚吃雞')

#

運(yùn)行結(jié)果(已經(jīng)在本目錄添加了‘msg’的文件,并且打開文件顯示了以下內(nèi)容:

'''
Duminjun is swimming  # a 模式可以創(chuàng)建文件并寫入
今晚吃雞
'''

a+模式

with open('msg', encoding='utf-8', mode='a+') as f:

f.write('Duminjun is swimming\n今晚吃雞')

運(yùn)行結(jié)果:和以上a運(yùn)行結(jié)果一樣

w模式

with open('msg', encoding='utf-8', mode='w') as f:

f.write('Duminjun is swimming\n今晚吃雞')

結(jié)果:和a模式一樣

w+ 模式

with open('msg4', encoding='utf-8', mode='w+') as f:

f.write('Duminjun is swimming\n今晚吃雞')

運(yùn)行結(jié)果:和a模式行的結(jié)果一樣

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
圖示:
這里寫圖片描述

三 如果有名為’msg‘的文件里面有’Duminjun is swimming\n今晚吃雞‘這些內(nèi)容,現(xiàn)在要增加以下內(nèi)容
’\nLaura is a playing tennis,What are you dong?’ 試試這幾種方法的效果

r

with open('msg', encoding='utf-8', mode='r') as f:

f.write('\nLaura is a playing tennis,What are you dong?')

運(yùn)行結(jié)果:

'''
Traceback (most recent call last):
f.write('\nLaura is a playing tennis,What are you dong?')
io.UnsupportedOperation: not writable      # f這個(gè)實(shí)例化對(duì)象中沒有可讀這一屬性
'''

r +

with open('msg', encoding='utf-8', mode='r+') as f:

f.write('\nLaura is a playing tennis,What are you dong?')

運(yùn)行結(jié)果:(沒有報(bào)錯(cuò),文件內(nèi)容如下:)

'''

Laura is a playing tennis,What are you dong?s swimming
今晚吃雞       # 添加的內(nèi)容已經(jīng)插入到了最前面,r+模式可以寫入文件,但是進(jìn)入文件句柄時(shí)光標(biāo)在最前面
'''

如果想要r+模式增加內(nèi)容到文末,可以先讀完全部?jī)?nèi)容,光標(biāo)就到了最后,然后在把內(nèi)容寫入文件

with open('msg', encoding='utf-8', mode='r+') as f:

f.readlines()

f.write('\nLaura is a playing tennis,What are you dong?')

運(yùn)行結(jié)果(文件內(nèi)容如下):

'''
Duminjun is swimming
今晚吃雞
Laura is a playing tennis,What are you dong?
'''

w

with open('msg', encoding='utf-8', mode='w') as f:

f.write('\nLaura is a playing tennis,What are you dong?')

運(yùn)行結(jié)果,文件中顯示以下內(nèi)容:

'''

Laura is a playing tennis,What are you dong?  # 原文件內(nèi)容全部清空,寫入了新增加的內(nèi)容
'''

w+

with open('msg', encoding='utf-8', mode='w+') as f:

f.write('\nLaura is a playing tennis,What are you dong?')

運(yùn)行結(jié)果:和w運(yùn)行結(jié)果一樣

a

with open('msg', encoding='utf-8', mode='a') as f:

f.write('\nLaura is a playing tennis,What are you dong?')

#

運(yùn)行結(jié)果,文件內(nèi)容如下

'''
Duminjun is swimming
今晚吃雞
Laura is a playing tennis,What are you dong?  # 已經(jīng)成功到文末
'''

a+

with open('msg', encoding='utf-8', mode='a+') as f:

f.write('\nLaura is a playing tennis,What are you dong?')

運(yùn)行結(jié)果:和a模式結(jié)果一樣

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
圖示
這里寫圖片描述
這里寫圖片描述

四,例題:寫函數(shù),用戶傳入修改的文件名,與要修改的內(nèi)容,執(zhí)行函數(shù),完成整個(gè)文件的批量修改操作

def modify_update():
file_name = input('please input the file name: ').strip()
modify_content = input('please input the content to modified: ')
new_content = input('please input new content you want to replace: ')
with open('{}'.format(file_name), encoding='utf-8', mode='r+') as f, \
open('msk5', encoding='utf-8', mode='w+') as f1:       # 打開兩個(gè)文件句柄,一個(gè)讀原文檔,一個(gè)寫入修改后的內(nèi)容
for i in f:
f1.write(i.replace('{}'.format(modify_content), '{}'.format(new_content)))

邊循環(huán)原文件每一行,邊添加新的一行到另外一個(gè)文件,如果replace沒有找到舊詞,字符串不會(huì)做任何修改,所以不用if...else語(yǔ)句

'''
w,w+在一個(gè)句柄里操作不會(huì)每次都清空,只有重新以w,w+模式打開一個(gè)句柄并且使用f.write()才會(huì)清空,就是說(shuō)兩個(gè)句柄是沒有

關(guān)于“python如何對(duì)文件進(jìn)行操作”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前題目:python如何對(duì)文件進(jìn)行操作-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://muchs.cn/article24/ddcije.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站策劃微信小程序、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)