大小文件的兩種不同操作方式

Linux文件系統

Linux文件系統中的文件是數據的集合,文件系統不僅包含着文件中的數據而且還有文件系統的結構,所有Linux 用戶和程序看到的文件、目錄、軟連接及文件保護信息等都存儲在其中。
python中也有文件的管理操作:
這裏我在pycharm 編輯了一個文本文件:README
操作文件分三步走:

1>open:打開文件,並且返回文件操作對象
2>操作文件
 read:將文件內容讀取到內存
 write:將指定內容寫入文件
3>close:關閉文件

操作文件的函數/方法
在python中要操作文件需要記住的一個函數和三個方法:
#python中一切皆對象
open:打開文件,並且返回文件操作對象
read:將文件內容讀取到內存
write:將指定內容寫入文件
close:關閉文件
open函數負責打開文件,並且返回文件對象
read/write/close三個方法都需要通過文件對象來調用

1>read方法–讀取文件

open函數的第一個參數是要打開的文件名(文件名區分大小寫)
如果文件存在,返回文件操作對象
如果文件不存在,會拋出異常
read方法可以一次性讀如並返回文件的所有內容
close方法負責關閉文件
如果忘記關閉文件,會造成系統消耗,而且會影響到後續對文件的執行
對kiosk有權限的任何文件都可以進行讀操作:
讀取方式見下方代碼:

# 1.打開文件file = open('文件路徑')
# file = open('/home/kiosk/PycharmProjects/python_02/while_99乘法表.py')
file = open('README')
# 2.操作文件 讀/寫
# read 方法:讀取文件內容(一次性返回文件的所有內容)
text1 = file.read()
print text1
# text2 = file.write('lala')
# 3.關閉文件
# close方法:負責關閉文件
file.close()
# 在開發中,通常會現編寫打開和關閉的代碼


讀取之前創建的文件,但需要指明文件的絕對路徑:

文件指針:

文件指針標記從哪個位置開始讀取數據
第一次打開文件時,通常文件指針會指向文件的開始位置
當執行了read方法後,文件指針會移動到讀取內容的末尾

readme文件內容:hello python

# 1.打開文件
file = open('README')
# 2.操作文件 讀/寫
# read 方法:讀取文件內容(一次性返回文件的所有內容)
text1 = file.read()
print text1
# 打印輸入內容的長度
print type(text1)
print len(text1)
print '*' * 50
text1 = file.read()
print text1
print len(text1)
# 3.關閉文件
# close方法:負責關閉文件
file.close()
# 在開發中,通常會現編寫打開和關閉的代碼


2> 寫文件:

寫文件和讀取文件的方式略有不同,在打開文件時,需要在文件名之後添加訪問方式,對文件的寫操作有兩種,一種是重寫覆蓋源文件內容,一種是追加到源文件內容的後面
打開文件的方式:
name = open(‘文件名’,’訪問方式’)
當要操作的文件不存在時,會創建一個該文件,並寫入文件
‘w’表重寫,會覆蓋源文件內容
‘a’表append,追加拓展到源文件的後面
下面就讓我們用實驗來驗證一下吧:
2.1>以重寫的方式打開文件:

# 1.打開文件
# 'w'表重寫,會覆蓋源文件內容
file = open('README','w')
# 2.寫入文件
file.write('lalala')
# 3.關閉文件
file.close()

測試查看源文件進行寫操作之後的結果:

2.2>以追加方式打開文件
如果該文件存在,文件指針會放在文件的末尾
如果文件不存在,創建文件並寫入

# 1.打開文件
# 'a'表示追加
file = open('README','a')
# 2.寫入文件
file.write('我喜歡你')
# 3.關閉文件
file.close()

結果:

3 > 文件的複製

# 1.打開文件
# 源文件以只讀的方式打開
file_read = open('README')
# 目標文件以寫的方式打開
file_write = open('README_CP','w')

# 從源文件讀取內容
text = file_read.read()
# 將讀取到的內容寫入目標文件中
file_write.write(text)

# 關閉文件
file_read.close()
file_write.close()

生成了一個複製出來的文件README_CP:

當然也有對大文件的操作,有時候我們並不知道大文件有多少行:
因此對大文件的操作和小文件的操作有所不同,接下來我們就來學習大文件的操作吧:

1>讀取大文件

按行讀取文件
read 方法默認會把文件的所有內容一次性讀到內存
如果文件太大,對內存的佔用會非常危險
readline方法:
readline方法可以一次性讀取一行內容
方法執行後,會把文件指針移動到下一行,準備再次讀取

讀取大文件的正確姿勢

file = open('README')
# 爲什麼要寫成死循環:因爲我們不知道要讀取的文件有多少行
while True:
    text = file.readline()
    # 如果文件指針到文件的最後一行,那麼就讀不到內容了
    if not text:
        break
    # 每讀取一行,末尾都已經有一個\n 所以讀取一行輸出時有一行空格
    print text
file.close()


2>

大文件寫操作

寫操作也有兩種方式:
重寫覆蓋’w’,
追加’a’
2.1>重寫覆蓋’w’

# 1.打開文件
# 'w'表重寫,會覆蓋源文件內容
file = open('README','w')
# 2.寫入文件
file.write(''lalala\n hello\n python\n ')
# 3.關閉文件
file.close()


2.2>追加寫操作

# 1.打開文件
# 'a'表示追加
file = open('README','a')
# 2.寫入文件
file.write('我喜歡你')
# 3.關閉文件
file.close()

3>大文件的複製

file_write = open('README_BIGCP','w')
file_read = open('README')
# 爲什麼要寫成死循環:因爲我們不知道要讀取的文件有多少行
while True:
    text = file_read.readline()
    # 如果文件指針到文件的最後一行,那麼就讀不到內容了
    if not text:
        break
    # 每讀取一行,末尾都已經有一個\n 所以讀取一行輸出時有一行空格
    print text
file_write.write(text)
file_read.close()
file_write.close()

with方式對文件進行操作

with的優勢
關鍵字with在不需要訪問文件後將其關閉,在這個程序中,
我們調用了open(),但沒有調用close();你也可以調用open()
和close()來打開和關閉文件,但這樣做時,系統會出現bug,導致close()
語句沒有執行,文件將不會關閉,未妥善
with文件讀取地關閉文件可能會導致數據丟失或受損,
如果在程序中過早地調用close(),
你會發現需要使用文件時它已經關閉,(無法訪問)
這會導致更多地錯誤,你並非在任何情況下都能輕鬆的確定關閉文件地適當時機
通過使用with結構,可用python去確定,
你只管打開文件,並在需要時使用它,
python會在合適的時候自動將其關閉

1.1>with讀取文件操作:

with open('file')as file_object:
    contents = file_object.read()
    print contents

1.2>with 大文件讀取

filename = 'file'
with open(filename) as file_object:
    for line in file_object:
        print line


readline一行一行地讀取

filename = 'file'
with open(filename) as file_object:
    lines = file_object.readline()
for line in lines:
    print line,

2 with寫文件

2.1>with文件重寫覆蓋

filename = 'linux'
with open(filename,'w') as file_object:
    file_object.write('I love python.\n')
    file_object.write('I love linux.\n')
with open('linux')as file_object:
    contents = file_object.read()
    print contents


2.2>with文件追加

filename = 'linux'
with open(filename,'a') as file_object:
    file_object.write('I love you.\n')
    file_object.write('I love yuhan.\n')
with open('linux')as file_object:
    contents = file_object.read()
    print contents

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章