1. 程式人生 > >python語法(四)— 文件操作

python語法(四)— 文件操作

並不會 head == ber odi tel 三個參數 lines python

前面幾天學習了一寫python的基礎語法,也學習了分支if,循環while和for。由於之前已經做過幾年的開發了,所以我們知道,許多數據來源並不是靠鍵盤輸入到程序中去的,而是通過數據庫和文件來獲取到的,那麽今天就來學習文件對象。

一、文件的打開(open()和file())

python 中為我們提供了兩種打開文件的方式,分別是open()函數和file()函數,為我們提供了初始化輸入/輸出(I/O)操作的通用方法,當我們打開一個文件時會返回一個文件對象,但是這裏需要註意的是,如果文件不存在,是會拋出異常的。而且file()函數和open()函數是一致的,可以互相替換。

  • 基礎語法
file = open(‘file_location‘, access_mode=‘r‘, buffering=-1)

其中三個參數分別代表了,文件路徑,這裏可以是相對路徑,也可以是絕對路徑,第二個參數是表示打開文件的模式,第三個參數是開始的位置。

  • 文件模式
文件模式操作
r 以讀的方式打開,如果文件不存在則拋出異常。文件可以不寫打開模式,模式是以r的方式打開。
w 以寫的方式打開,如果文件存在則清空文件內的內容,如果文件不存在,則創建文件。
a 以追加模式打開文件,如果文件存在則追加內容如果文件不存在則創建新文件。
r+ 以讀寫模式打開,如果文件不存在則拋出異常
w+ 以讀寫模式打開,如果文件存在則清空文件內的內容,如果文件不存在,則創建文件。
a+ 以讀寫模式打開文件,如果文件存在則追加內容如果文件不存在則創建新文件。

二、文件讀取 read 方法

read()方法是直接以字節的方式來讀取文件,將文件讀取到字符串中,可以給到讀取文件的字節數,如果文友給定,則默認為讀到文件末尾為止,也就是-1.

  • 語法
file = open("fileName");
data = file.read();
print(data);
file.close(); 

如果一個文件特別大,我們這樣去讀的話就會把文件中的所有內容都會讀到內存中,這樣會導致我們的內存被撐爆,所有我們需要在這裏限制讀的大小,也就是在read()中加入參數,這裏參數表示字節,我們一般是寫4096,也就是讀4096個字節。為什麽是4096呢?因為,我們硬盤的分區格式化時,硬盤的一個分區最小簇是4096(4K),而且硬盤的工作效率比較低,所以當我們去尋址時,最好是將這一個簇的空間的值都拿出來,這樣工作效率是最高的。

三、文件讀取 readline 方法與 readLines 方法

readlin()方法只適用於文本文件,因為他是讀取一行文件。

  • readlin()語法
file = open("fileName");
data = file.readlin();
file.close();

 

readlins()方法只適用於文本文件,因為他是讀取剩下的所有行的文件。

  • readlins()語法
file = open("fileName");
data = file.readlins();
file.close(); 

四、文件叠代

如果將文本文件逐行進行處理,此時我們就需要結合循環去處理文件。
我們來看個例子,讀取一個文本文件,並且將其逐行輸出。

# -*- coding=utf-8 -*- 
‘‘‘
Created on 2018年12月23日 
文件

@author: Herrt灬淩夜
‘‘‘
file = open("C:\\Users\\Administrator\\Desktop\\testFile.txt");
for line in file :
    print(line, end="");
file.close();

 

我們將file的每一行賦值給line,然後輸出line。這裏需要註意的是print是自帶一個換行符的,所以我們在這裏要將print的換行符去掉。

五、文件寫入 write 方法

write 方法與 read方法正好相反,它是將文本數據和二進制數據寫入到文件中,而在寫入的過程中,程序是不會自動加如結束語句,比如換行等等,這需要我們手動寫入。

  • write 語法
file = open("fileName", "w");
data = file.write("content\n");
file.close();

 

這裏我們需要註意的是,我們使用write寫入文件時,文件並不會立刻寫入文件中,而是首先存入緩存中,當文件達到比較大,比如4K時會自動往硬盤上寫,但是如果我們需要立刻將文件寫入到文件的話,我們就需要使用文件的flush()方法,或者將文件closer(),這樣,系統就會立刻將緩存中的內容直接寫入到硬盤中。

六、文件寫入 writelines([]) 方法

writelines方法,同樣是只適用於文本文件,但是他的傳參是一個列表,可以將列表中的每一個元素寫入到文件中。
我們看個例子:

file = open("C:\\Users\\Administrator\\Desktop\\testFile.txt", "a");
data = file.writelines(["這是第四行\n", "這是第五行\n"]);
file.close();

 

七、練習

所謂熟能生巧,尤其我們剛剛開始學習語言更是需要多加練習,所以最後以一個例子來結束今天的學習。
模擬 cp 操作:

# -*- coding=utf-8 -*- 
‘‘‘
Created on 2018年12月23日 
文件

@author: Herrt灬淩夜
‘‘‘
srcFileLocation = "C:\\Users\\Administrator\\Desktop\\None和表達式.mp4";
dstFileLocation = "C:\\Users\\Administrator\\Desktop\\cpNone和表達式.mp4";

srcFile = open(srcFileLocation, "rb");
dstFile = open(dstFileLocation, "wb");

while True :
    data = srcFile.read(4096);
    if len(data) == 0 :
        break;
    print("1");
    dstFile.write(data);

srcFile.close();
dstFile.close();

 

我這裏是將一個視頻文件做了一個拷貝操作,需要註意的是win的操作系統如果open()文件要以字節的方式打開時,我們需要加個b表示以字節方式打開。

-------------------- END ---------------------


最後附上作者的微信公眾號地址和博客地址


公眾號:wuyouxin_gzh


技術分享圖片



Herrt灬淩夜:https://www.cnblogs.com/wuyx/

python語法(四)— 文件操作