python檔案的操作

來源:互聯網
上載者:User

標籤:append   cal   mat   configure   int   sizeof   hash   唯讀   flush   

首先看看在pycharm輸入檔案控制代碼,怎樣顯示他的定義

f = open(‘student_msg‘, encoding=‘utf-8‘, mode=‘a+‘) # 開啟一個檔案,賦值給f

print(type(f), f) # f檔案控制代碼是屬於一個類叫<class ‘_io.TextIOWrapper‘>,也是可迭代對象。(io ---> input and out)

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

>>
[‘_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 這個執行個體化對象中的屬性 {‘mode‘: ‘a+‘}

源碼對其的解釋定義
‘‘‘
========= ===============================================================
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)  可讀可寫========= ===============================================================

‘‘‘
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
檔案的操作使用的頻率還是很高,這幾種方法很容易弄混,為了避免以後出現偏差,現在我把幾種常用的方法整理透。
一,.readline() 和 .readlines() 目的是瀏覽,尋找檔案中的內容用什麼模式。先看用六種方式執行的結果。
在register檔案中有以下內容,看下分別執行這六種方式返回的結果
”’
這些是檔案中的內容
dumingjun
mickle|male
”’

mode=‘r‘

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

>>運行結果:(檔案中內容無變化)

‘‘‘
這些是檔案中的內容

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

mode=‘r+‘

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

>>運行結果:(檔案中內容無變化)

‘‘‘
這些是檔案中的內容 # 先讀了一行

[‘dumingjun\n‘, ‘mickle|male‘] # 然後往下執行,把每行作為一個字串放入列表這個容器中,分行符號為\n
‘‘‘

mode=‘w‘

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

運行結果:(檔案中已經沒有內容了)

‘‘‘
Traceback (most recent call last):
print(f.readline())
io.UnsupportedOperation: not readable # 報錯原因:’w‘模式是無法讀的,只要看到’w‘,先把檔案全清空
‘‘‘

mode=‘w+‘

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

運行結果:(檔案內容已經為空白)

‘‘‘

先清空,然後接下來執行了f.readline() 由於為空白,所以返回了空的字元

[] # 接下來執行f.readlines(), 返回一個空列表
‘‘‘

mode=‘a‘

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

運行結果:(檔案內容不變)

‘‘‘
Traceback (most recent call last):
print(f.readline())
io.UnsupportedOperation: not readable # 報錯原因,’a‘模式只能add,增加,不可讀,因為’a‘模式進去時游標自動放在檔案的末尾。
‘‘‘

mode=‘a+‘

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

運行結果:(檔案內容不變)

‘‘‘

因為游標是放在最後,所以讀取的內容為空白

[] # 同理redlines()返回的是一個空列表。
‘‘‘
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
以上代碼的內容顯示在圖片上:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
總結
這裡寫圖片描述
閱讀,尋找相關內容,只能用‘r’或 ‘r+’模式

二 現在要建立一個檔案,並且新增內容,先看看五種方法啟動並執行結果

‘‘‘
建立名為‘msg‘的檔案,並寫入內容以下內容:
’Duminjun is swimming\n今晚吃雞‘
‘‘‘

r模式就不用試了,r只能讀,試試r+模式with open(‘msg9‘, encoding=‘utf-8‘, mode=‘r‘) as f:f.write(‘Duminjun is swimming\n今晚吃雞‘)運行結果:

‘‘‘
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今晚吃雞‘)

#

運行結果(已經在本目錄添加了‘msg’的檔案,並且開啟檔案顯示了以下內容:

‘‘‘
Duminjun is swimming # a 模式可以建立檔案並寫入
今晚吃雞
‘‘‘

a+模式with open(‘msg‘, encoding=‘utf-8‘, mode=‘a+‘) as f:f.write(‘Duminjun is swimming\n今晚吃雞‘)運行結果:和以上a運行結果一樣w模式with open(‘msg‘, encoding=‘utf-8‘, mode=‘w‘) as f:f.write(‘Duminjun is swimming\n今晚吃雞‘)結果:和a模式一樣w+ 模式with open(‘msg4‘, encoding=‘utf-8‘, mode=‘w+‘) as f:f.write(‘Duminjun is swimming\n今晚吃雞‘)運行結果:和a模式行的結果一樣

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今晚吃雞‘這些內容,現在要增加以下內容
’\nLaura is a playing tennis,What are you dong?’ 試試這幾種方法的效果

rwith open(‘msg‘, encoding=‘utf-8‘, mode=‘r‘) as f:f.write(‘\nLaura is a playing tennis,What are you dong?‘)運行結果:

‘‘‘
Traceback (most recent call last):
f.write(‘\nLaura is a playing tennis,What are you dong?‘)
io.UnsupportedOperation: not writable # f這個執行個體化對象中沒有可讀這一屬性
‘‘‘

r +with open(‘msg‘, encoding=‘utf-8‘, mode=‘r+‘) as f:f.write(‘\nLaura is a playing tennis,What are you dong?‘)運行結果:(沒有報錯,檔案內容如下:)

‘‘‘

Laura is a playing tennis,What are you dong?s swimming
今晚吃雞 # 添加的內容已經插入到了最前面,r+模式可以寫入檔案,但是進入檔案控制代碼時游標在最前面
‘‘‘

如果想要r+模式增加內容到文末,可以先讀完全部內容,游標就到了最後,然後在把內容寫入檔案with open(‘msg‘, encoding=‘utf-8‘, mode=‘r+‘) as f:f.readlines()f.write(‘\nLaura is a playing tennis,What are you dong?‘)運行結果(檔案內容如下):

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

wwith open(‘msg‘, encoding=‘utf-8‘, mode=‘w‘) as f:f.write(‘\nLaura is a playing tennis,What are you dong?‘)運行結果,檔案中顯示以下內容:

‘‘‘

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?‘)運行結果:和w運行結果一樣awith open(‘msg‘, encoding=‘utf-8‘, mode=‘a‘) as f:f.write(‘\nLaura is a playing tennis,What are you dong?‘)

#

運行結果,檔案內容如下

‘‘‘
Duminjun is swimming
今晚吃雞
Laura is a playing tennis,What are you dong? # 已經成功到文末
‘‘‘

a+with open(‘msg‘, encoding=‘utf-8‘, mode=‘a+‘) as f:f.write(‘\nLaura is a playing tennis,What are you dong?‘)運行結果:和a模式結果一樣

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
圖示
這裡寫圖片描述
這裡寫圖片描述

四,例題:寫函數,使用者傳入修改的檔案名稱,與要修改的內容,執行函數,完成整個檔案的批量修改操作

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: # 開啟兩個檔案控制代碼,一個讀原文檔,一個寫入修改後的內容
for i in f:
f1.write(i.replace(‘{}‘.format(modify_content), ‘{}‘.format(new_content)))

邊迴圈原檔案每一行,邊添加新的一行到另外一個檔案,如果replace沒有找到舊詞,字串不會做任何修改,所以不用if...else語句

‘‘‘
w,w+在一個控制代碼裡操作不會每次都清空,只有重新以w,w+模式開啟一個控制代碼並且使用f.write()才會清空,就是說兩個控制代碼是沒有

python檔案的操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.