《pythonI之IO編程》

前言

在磁盤上讀寫文件的功能是操作系統提供的,現在操作系統不允許普通程序直接操作磁盤,所以讀寫文件是請求操作系統打開一個文件對象(文件描述符),然后通過操作系統提供的接口對這個對象讀寫數據,所以使用完文件必須關閉,因為文件對象會占用操作系統的資源,并且操作系統同一時間打開的文件數是有限的。

文件的讀寫

讀文件open()函數
open(name[, mode[, buffering]]) -> file object
若該路徑找不到相應的文件夾,則報錯:IOError
f = open(“F:/python/tian.txt”,”r”)
read() 函數,可一次讀取文件的全部內容,以str的類型存在內存中
print type(f) # 文件 file
print type(f.read()) # 字符串 str
在IDE中 read() 函數讀取的中文是亂碼,所以需要解碼。
print f.read().decode(“gbk”,”ignore”).encode(“utf-8”)

調用read()函數會一次性讀取文件的全部內容,如果文件有10G,內存就爆了,所以提供:
一次讀取 size 字節的內容
f.read(size)

一次讀取一行的內容
f.readline()

一次讀取所有的內容,但是按照行返回list
f.readlines()

如下所示:
for line in f.readlines():
print(line.strip()) # 把末尾的’\n’刪掉

文件對象會占用操作系統的資源,并且操作系統同一時間打開的文件數量是有限的所以文件的相關操作完成時,需要close()
f.close()

但是,當open()報錯的時候,程序跳出,則不執行close()函數,
所以可以采用try…finally函數體,無論try函數體出現什么錯誤都會執行finally函數體

try:
    d = open("F:/python/tian.txt","r")
    print d.read().decode("gbk","ignore").encode("utf-8")
finally:
    if d:
        d.close()

python有with語句 自動幫我們調用close()函數
則使用with語句寫文件是一個好函數

with open("F:/python/tian.txt","r") as h:
    print h.read().decode("gbk","ignore").encode("utf-8")

python 提供一個codecs模塊幫我們在讀文件的時候自動轉換編碼,讀出unicode編碼

import codecs
with codecs.open("F:/python/test_zhongwen.txt","r",'gbk') as f:
    print f.read().encode("utf-8")

寫文件,文件不存在則新建,若存在則直接寫.
但是寫文件時,系統不會及時的把數據寫入磁盤,而是放入內存中,當系統空閑的時候才往內存中寫,只有close()的時候才會把所有的文件寫入磁盤上所以忘記close的時候,常常磁盤上數據可能寫入的不完整。

f = open("F:/python/test_21.txt",'w')
f.write("blwy,rzss\n")
f.write('hello,world!')
f.close()

# 或者使用with語法
with open("F:/python/test_21.txt",'w') as f:
     f.write("xxxx")

文件和目錄操作

提供os模塊可以直接調用操作系統提供的接口函數。

import os
# 查看絕對路徑
os.path.abspath(".")
# 獲得當前工作目錄
os.getcwd()
# 將兩個路徑合并
# 注意 linux下合并符為/  而win下合并符為\
os.path.join("F:/python","write1_test.txt")
# 將兩個路徑拆分
os.path.split("F:/python/write1_test.txt")
# 返回文件名字
os.path.basename("F:/python/write1_test.txt")
# 返回文件路徑
os.path.dirname("F:/python/write1_test.txt")

# 直接得到文件的擴展名
os.path.splitext("F:/python/write1_test.txt")

# 創建目錄
os.mkdir("F:/python/mkdir_test")
# 刪除目錄
os.rmdir("F:/python/mkdir_test")

# 創建文件
f = open("F:/python/mdir_test.txt","w")
f.close()

# 文件改名字 old/new 都必須寫完整路徑(可以理解為替換)
os.rename("F:/python/mdir_test.txt","F:/python/mdir.txt")
# 刪除文件
os.remove("F:/python/python_test_workplace/mdir.txt")

# 復制函數引用新的模塊  shutil
import shutil
shutil.copyfile("F:/python/python_test_workplace/1.txt","2.txt")

一生順利,一生被愛。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • IO編程概念 IO在計算機中指Input/Output,也就是輸入和輸出。由于程序和運行時數據是在內存中駐留,由C...
    時間之友閱讀 731評論 0 0
  • Linux系統一般有4個主要部分: 內核、shell、文件系統和應用程序。內核、shell和文件系統一起形成了基本...
    偷風箏的人_閱讀 3,281評論 1 17
  • Linux系統一般有4個主要部分:內核、shell、文件系統和應用程序。 內核、shell和文件系統一起形成了基本...
    請愛護小動物閱讀 2,912評論 0 22
  • 獨自一個人生活在一座城市里 你做過最孤獨的事是什么? 知乎上有很多回答,有人說是凌晨肚子劇烈絞痛,吃了幾把藥片之后...
    枕邊音樂哦閱讀 1,276評論 17 12
  • 秋天的氣息是楓葉構成的。楓葉把大地染紅了,把人們美好的心情留住了…… 楓葉的顏色有紅色的黃色 葉子像小鴨子的...
    嘉露閱讀 2,265評論 0 0