1. 程式人生 > >python中對檔案的操作總結

python中對檔案的操作總結

檔案物件

  1. 建立文字檔案
  2. 想檔案中追加文字
  3. 讀取文字內容
  4. 檔案異常

路徑和目錄 —-os簡介




檔案物件

1.建立文字檔案

def make_file():
    f = open("test.txt", "w")
    f.write("Hello World")
    f.close()

這段程式碼建立了一個test.txt的檔案,並表明是寫的屬性(預設是讀的屬性),並寫入了Hello World的欄位,這個檔案的位置要看你的工作路徑,如果使用是python自帶的那個編譯器,建立的檔案一般是在
C://Python34 (這裡是因為我的版本是3.4的),如果是使用的pycharm,則就在你的專案的下面。因為這裡註明了是使用的寫的屬性,如果這個檔案不存在的話就會建立一個新的檔案,如果存在的話會把原來的刪除然後建立一個新的檔案。

下面這種方法可以判斷一個檔案是存在:

import os
def make_file():
    if os.path,isfile("test.txt"):
        print("file are already exists!")
    else:
        f = open("test.txt", "w")
        f.write("Hello World")
        f.close() 

這裡使用os.path.isfile來判斷這個檔案是否存在,然後建立這個檔案

2.向檔案中追加資料
這裡向檔案中追加資料其實是很簡單的,只要修改open第二個引數的屬性就可以實現,使用a這個屬性就行了:

def add_file:
    a = open("test,txt", "a")
    a.write("我是第二行")
    a.close()

這裡修改第二個屬性可以實現很多的有趣的功能,下面展示的是原始碼裡面的註釋部分:
========= ===============================================================
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)
‘U’ universal newline mode (deprecated)
========= ===============================================================

翻譯過來:
‘r’ 開啟檔案為只讀模式(預設的模式)
‘w’ 開啟檔案為寫模式,會首先刪除原來的檔案
‘x’ 建立一個新的檔案,並且開啟這個檔案為寫模式
‘a’ 開啟檔案為寫模式,如果檔案存在,會把資料追加到檔案的末尾
‘b’ 二進位制模式
‘t’ 文字模式(預設)
‘+’ 開啟硬碟中的一個檔案進行讀寫
‘U’ 通用的換行模式(不建議使用)

3.讀取檔案內容

def read_file():
    f = open("test.txt", "r")
    print(f.readline())
    f.close()

這個是讀取檔案中的一行的內容,讀取的時候遇到“\n”結束

.

def read_file():
    f = open("test.txt", "r")
    text = f.read()
    print(text)
    f.close()

這個是讀取檔案中的全部的內容,打印出來的包含檔案裡面原來的格式

.

def print_line_lenght():
    f =open("test.txt", "r")
    text = f.readlines()
    for line in text:
        print(len(line))

使用這個方法可以把檔案中資料以元組的形式返回,每一行資料變成了元組裡面的一個元素,使用上面的程式碼,可以打印出來檔案裡面的每一行字元的多少



路徑和目錄—os簡介

1.路徑
這裡推薦一篇部落格,總結的挺全面的:python os.path模組常用方法詳解

下面使用都是加上import os 程式碼的
os.path.join()
可以用來將目錄名稱組合成路徑,裡面的引數個數大於等於2個,同時使用多個引數的時候,最後一個絕對路徑會覆蓋前面的所有的路徑:

print(os.path.join("Hello", "f:\\", "python\\", "temp"))

輸出結果是:

f:\\python\\temp

這裡主要辨析一下os.path.isfile() 、 os.path.isdir() 、 os.path.exists()
os.path.isfile():這個只是判斷路徑裡面的的檔案是否存在,存在檔案的話返回True
os.path.isdir():這個只是判斷路徑裡面的目錄是否存在,目錄存在就返回True
os.path.exists():這個是判斷路徑存在不存在,不區分是檔案還是目錄
下面是示例:

print(os.path.isfile("F:\\test_Python\\test.txt"))
print(os.path.isdir("F:\\test_Python\\test.txt"))
print(os.path.exists("F:\\test_Python\\test.txt"))

.列印的結果是:

True
False
True

這是另為一個示例:

print(os.path.isfile("F:\\test_Python"))
print(os.path.isdir("F:\\test_Python"))
print(os.path.exists("F:\\test_Python"))

列印的結果是:

False
True
True

通過這兩個比較,就能看出來他們三個的不同了

2.目錄
使用os.listdit()可以來獲取目錄裡面的內容,比如說,我用print(os.listdir("c:\\")) 打印出來的是:

['$360Section', '$Recycle.Bin', '360SANDBOX', '360驅動大師目錄', 'Boot', 'boot.ini', 'bootmgr', 'BOOTNXT', 'bootsqm.dat', 'Documents and Settings', 'DOCUME~1', 'Drcom', 'GHLDR', 'ghldr.mbr', 'hiberfil.sys', 'install.log', 'InstallConfig.ini', 'Intel', 'Keil', 'LJP1100_P1560_P1600_Full_Solution', 'log', 'log_network.txt', 'MSOCache', 'package', 'pagefile.sys', 'PerfLogs', 'Program Files', 'Program Files (x86)', 'ProgramData', 'Python34', 'QLDownload', 'QMDownload', 'Recovery', 'RECYCLER', 'swapfile.sys', 'SymCache', 'System Volume Information', 'Temp', 'Users', 'Windows', 'xmlrpc_error.log', 'YYFESOYKMV', '~1']

這是我C盤目錄下面的所有的檔案。使用sorted()來對生成的元組可以排序,預設是按字母的先後順序來排的:print(sorted(os.listdir("c:\\"))) ,打印出來的結果就是排好順序的元組。

使用這個方法,我們可以使用遞迴的方法對一個目錄進行列印,可以把整個目錄裡面的檔案都打印出來:

def print_tree(path):
    for name in os.listdir(path):
        full_path = os.path.join(path, name)
        print(full_path)
        if os.path.isdir(full_path):
            print_tree(full_path)

3.對目錄的重新命名、移動、複製、刪除
下面的程式碼預設匯入了import shutil
1.使用shutil.move()可以實現把一個檔案移動到另外一個目錄下面,或者使用這個為一個檔案進行新的命名,例如:

shutil.move("old_file.txt", "C:\\data\\temp")

2.使用shutil.copy()可以實現把一個檔案複製到一個新的目錄下面,或者使用這個建立一個新的名稱的檔案,例如:

shutil.copy("old_file.txt", "C:\\data\\temp")

3.使用shutil.remove()來刪除檔案

os.remove("junk.txt")

注意:使用os.rename()也可以來進行重新命名,但是使用這個方法沒法進行檔案的移動,所以一般並不使用這個方法。

4.刪除和建立目錄
1.建立一個虛擬的目錄

os.mkdir("C:\\photo\\Hello\\temp")

但是如果C:\photo\Hello這個目錄不存在的話,那麼就會引發異常。這裡建議使用os.makedirs() 這個方法可以建立多重的目錄

2.刪除目錄

os.rmdir("C:\\photo\\Hello\\temp")

這個只能刪除空的目錄,上面的程式碼只會刪除temp這個目錄
使用shutil.rmtree("C:\\photo\\Hello\\temp") 可以直接刪除該目錄,不管目錄下面有沒有檔案和子目錄