Linux操做系統及文件操做

Linux系統及其組成

操做系統的做用python

  操做系統(OS)是管理計算機硬件與軟件資源的計算機程序,同時也是計算機系統的內核與基石。操做系統須要處理如管理與配置內存、決定系統資源供需的優先次序、控制輸入設備與輸出設備、操做網絡與管理文件系統等基本事務。操做系統也提供一個讓用戶與系統交互的操做界面。shell

Linux操做系統組成express

  一個典型的Linux操做系統組成爲:Linux內核,文件系統,命令行shell,圖形界面和桌面環境,幷包各類工具和應用軟件。網絡

  • Linux內核: Linux操做系統的核心代碼ide

  • 文件系統:一般指稱管理磁盤數據的系統,可將數據以目錄或文件的型式存儲。每一個文件系統都有本身的特殊格式與功能函數

  • shell命令: 接收用戶命令,而後調用相應的應用程序,並根據用戶輸入的指令來反饋給用戶指定的信息。工具

shell命令

文件操做命令

  • Linux下的目錄結構

做用 命令
切換工做目錄 cd
查看文件 ls, ls -l, ls -a
複製文件 cp -r
移動文件 mv
刪除文件 rm -rf,rmdir
建立文件夾 mkdir -p
建立文件 touch
查看文件內容 cat

IO

定義學習

  • 在內存中存在數據交換的操做認爲是IO操做,好比和終端交互,和磁盤交互,和網絡交互等

程序分類編碼

  • IO密集型程序:在程序中有大量IO操做,而CPU運算較少。消耗CPU較少,耗時長
  • 計算密集型程序:程序運行中計算較多,IO操做相對較少。CPU消耗多,執行速度快,幾乎沒有阻塞。

文件

  文件是保存在持久化存儲設備(硬盤、U盤、光盤..)上的一段數據。從格式編碼角度分爲文本文件(打開後會自動解碼爲字符)、二進制文件(視頻、音頻等)。在Python裏把文件視做一種類型的對象,相似以前學習過的其它類型。spa

字節串(bytes)

   在python3中引入了字節串的概念,與str不一樣,字節串以字節序列值表達數據,更方便用來處理二進程數據。所以在python3中字節串是常見的二進制數據展示方式。

  • 普通的ascii編碼字符串能夠在前面加b轉換爲字節串,例如:b'hello'
  • 字符串轉換爲字節串方法 :str.encode()
  • 字節串轉換爲字符串方法 : bytes.decode()

 文件讀寫

【1】打開文件

file_object = open(file_name, access_mode='r', buffering=-1)
功能:打開一個文件,返回一個文件對象。
參數:file_name  文件名;
     access_mode  打開文件的方式,若是不寫默認爲‘r’ 
          文件模式                        操做
              r                    以讀方式打開 文件必須存在
              w                    以寫方式打開
                                   文件不存在則建立,存在清空原有內容 
              a                    以追加模式打開 
              r+                   以讀寫模式打開 文件必須存在
              w+                   以讀寫模式打開文件
                                   不存在則建立,存在清空原有內容
              a+                   以讀寫模式打開 追加模式
              rb                   以二進制讀模式打開 同r
              wb                   以二進制寫模式打開 同w
              ab                   以二進制追加模式打開 同a
              rb+                  以二進制讀寫模式打開 同r+
              wb+                  以二進制讀寫模式打開 同w+
              ab+                  以二進制讀寫模式打開 同a+
     buffering  1表示有行緩衝,默認則表示使用系統默認提供的緩衝機制。
返回值:成功返回文件操做對象。

打開文件示例:

 1 # 打開文件
 2 
 3 # f = open('a.py','r+') # 要求文件存在
 4 # f = open('a.py','w') # 文件不存在建立存在清空
 5 # f = open('a.py','a') # 文件不存在建立,存在追加
 6 
 7 # f = open('a.py','rb') # 加b後續的讀寫都以字節串操做
 8 
 9 """
10 全部文件均可以用二進制方式打開(b)
11 可是二進制格式文件則不能用文本方式打開(後續讀寫出錯)
12 """
13 f = open('mm.jpg','r')
14 
15 # 經過f 進行讀寫操做
16 
17 # 關閉 文件對象
18 f.close()
View Code

 

【2】讀取文件

read([size])

功能:來直接讀取文件中字符

參數:若是沒有給定size參數(默認值爲-1)或者size值爲負,文件將被讀取直至末尾,給定size最多讀取給定數目個字符(字節)。

返回值:返回讀取到的內容

  注意:文件過大時不建議直接讀取到文件結尾,讀到文件結尾會返回空字符串。

readline([size])

功能:用來讀取文件中一行

參數:若是沒有給定size參數(默認值爲-1)或者size值爲負,表示讀取一行,給定size表示最多讀制定的字符(字節)。

返回值:返回讀取到的內容

readlines([sizeint])

功能:讀取文件中的每一行做爲列表中的一項

參數:若是沒有給定size參數(默認值爲-1)或者size值爲負,文件將被讀取直至末尾,給定size表示讀取到size字符所在行爲止。

返回值:返回讀取到的內容列表

文件對象自己也是一個可迭代對象,在for循環中能夠迭代文件的每一行

for line in f:
     print(line)

讀寫文件示例:

 1 # 打開文件
 2 f = open('Install.txt','r')
 3 
 4 # 讀取文件
 5 # data = f.read()
 6 # print(data)
 7 
 8 # 循環讀取文件內容
 9 # while True:
10 #     # 若是讀到文件結尾 read()會讀到空字符串
11 #     data = f.read(1024)
12 #     # 讀到結尾跳出循環
13 #     if not data:
14 #         break
15 #     print(data)
16 
17 # 讀取文件一行內容
18 # data = f.readline(5)
19 # print(data)
20 # data = f.readline(5)
21 # print(data)
22 
23 # 讀取內容造成列表
24 # data = f.readlines(20)  # 讀取前20個字節所在的全部行
25 # print(data)
26 
27 # 使用for循環讀取每一行
28 for line in f:
29     print(line)  # 每次迭代到一行內容
30 
31 
32 # 關閉
33 f.close()
View Code

 

【3】寫入文件

write(string)

功能:把文本數據或者二進制數據塊的字符串寫入到文件中去

參數:要寫入的內容

  • 若是須要換行要本身在寫入內容中添加 \n

writlines(str_list)

功能:接受一個字符串列表做爲參數,將他們寫入文件

參數:要寫入的內容文件

寫入文件示例:

 1 # 打開文件
 2 # f = open('a.py','a')
 3 f = open('a.py','w')
 4 
 5 # 寫操做
 6 # f.write("hello 死鬼\n")
 7 # f.write("哎呀,幹啥\n")
 8 
 9 # 將列表中每一項分別寫入文件內
10 l = ['hello world\n','hello kitty\n']
11 f.writelines(l)
12 
13 
14 # f.close()
View Code

 

【4】關閉文件

打開一個文件後咱們就能夠經過文件對象對文件進行操做了,當操做結束後使用close()關閉這個對象能夠防止一些誤操做,也能夠節省資源。

file_object.close()

【5】with操做

  python中的with語句使用於對資源進行訪問的場合,保證無論處理過程當中是否發生錯誤或者異常都會執行規定的「清理」操做,釋放被訪問的資源,好比有文件讀寫後自動關閉、線程中鎖的自動獲取和釋放等。

with語句的語法格式以下:

with context_expression [as target(s)]:
    with-body

經過with方法能夠不用close(),由於with生成的對象在語句塊結束後會自動處理,因此也就不須要close了,可是這個文件對象只能在with語句塊內使用。

with open('file','r+') as f:
    f.read()

  注意

  1. 加b的打開方式讀寫要求必須是字節串
  2. 不管什麼文件均可以使用二進制方式打開,可是二進制文件使用文本方式打開讀寫會出錯

其餘操做

刷新緩衝區

  緩衝:系統自動的在內存中爲每個正在使用的文件開闢一個緩衝區,從內存向磁盤輸出數據必須先送到內存緩衝區,再由緩衝區送到磁盤中去。從磁盤中讀數據,則一次從磁盤文件將一批數據讀入到內存緩衝區中,而後再從緩衝區將數據送到程序的數據區。

刷新緩衝區條件:

  1. 緩衝區被寫滿
  2. 程序執行結束或者文件對象被關閉
  3. 行緩衝遇到換行
  4. 程序中調用flush()函數

flush()

該函數調用後會進行一次磁盤交互,將緩衝區中的內容寫入到磁盤

代碼示例:

 1 # f = open('a.py','w',1) # 行緩衝
 2 f = open('a.py','w')
 3 
 4 while True:
 5     data = input(">>")
 6     if not data:
 7         break
 8     f.write(data + '\n')
 9     f.flush()  # 刷新緩衝區
10 
11 f.close()
View Code

 

文件偏移量

定義

  打開一個文件進行操做時系統會自動生成一個記錄,記錄中描述了咱們對文件的一系列操做。其中包括每次操做到的文件位置。文件的讀寫操做都是從這個位置開始進行的。

基本操做

tell()

功能:獲取文件偏移量大小

 

seek(offset[,whence])

功能:移動文件偏移量位置

參數:offest表明相對與某個位置移動的字節數。負數表示向前移動,正數表示向後移動。whence是基準位置的默認值爲0,表明從文件開頭算起,1表明從當前位置算起,2表明從文件末尾算起。

  •   必須以二進制方式打開文件時基準位置才能是1或者2

代碼示例:

 1 # 以r,w打開文件偏移量在開頭,以a打開文件偏移量在結尾
 2 f = open("mm.jpg",'rb+')
 3 print(f.tell())
 4 
 5 # f.write("Hello world")
 6 #
 7 # print(f.tell())
 8 
 9 # 以開頭爲基準向後移動5個字符
10 f.seek(1024,0)
11 
12 f.write('你好'.encode())
13 # data = f.read()
14 # print(data)
15 
16 f.close()
View Code

 

文件描述符

【1】定義

系統中每個IO操做都會分配一個整數做爲編號,該整數即這個IO操做的文件描述符

【2】獲取文件描述符

fileno()

經過IO對象獲取對應的文件描述符

文件管理函數

獲取文件大小

 os.path.getsize(file) 

查看文件列表

 os.listdir(dir) 

查看文件是否存在

 os.path.exists(file) 

判斷文件類型

 os.path.isfile(file) 

刪除文件

 os.remove(file) 

相關文章
相關標籤/搜索