Python文件處理os模塊介紹(os.system運行shell命令中文亂碼解決方案) -*- Python基礎知識12 -*-


打開文件

先假設我們在文件中出來現在已經有的.py文件還有一個叫text.txt的文件。

open

語法:open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
open中參數眾多,但是我們常用的參數也就只有file,mode和encoding,接下來我們就來介紹一下這幾個參數的作用

file

文件名或路徑,這是open的必填參數,如果調用open最少你要說清你要打開那個文件。

路徑小知識:在Windows系統中路徑的分割使用的是\但是\在Python中是轉義字符,所以我們可以使用\來講\轉義成普通\,或使用f’'格式化字符串,或使用/來分割路徑,因為咋Linux系統中路徑的分割就是使用/進行的。

open(text.txt)

mode

文件打開模式,先來介紹參數,參數具體用法會在操作文檔的時候具體介紹

模式 功能
r 只讀模式(如果不填寫,則默認就是此模式)
w 覆蓋寫入模式(如果存在和寫入文件同名文件則覆蓋,不存在則新建)
x 新建文件寫入模式(如果存在和寫入文件同名文件則報錯,不存在則新建)
a 追加寫入模式(如果存在和寫入文件同名文件則在文件內容后追加,不存在則新建)
b 二進制讀取模式,此模式可以讀取除純文本之外的其他文件
t 文本模式(默認打開模式)
+ 擴展模式,可以擴展上述的模式,但必須要配合使用,比如:r+就擴展了只讀模式,讓這個模式既可讀又可寫

encoding

文件的編碼格式,如果不填寫就只能讀取ASCII格式的文件,讀取中文的文件就會報錯,如果想要讀取中文,一般常用UTF-8。

操作文件

讀取文檔

逐個讀取read

語法:文件對象.read(size = -1)

  1. read()默認值是-1,會自動讀取到最后一個值

  2. 可以給read指定一個值,read每次讀取都會從上次讀取結束的位置開始。換行符也算一個字符。

  3. 如果read指定的讀取數量大於實際數量,這會讀取所有文件。如果沒有內容,會返回一個‘’空串

逐行讀取

語法:文件對象.readline()
每次讀取一行內容。
語法:文件對象.readlines()
一行一行讀取,並且會把每行內容自動封裝到列表中。

文件讀取位置

  1. tell()可以用來返回當前讀取到的位置
  2. seek(參數1,參數2)可以修改當前讀取的位置
    1. 參數1用於指定讀取位置。
    2. 第二個參數為從哪開始指定位置
      • 第二個參數接收:0從頭開始計數(默認),1從當前位置開始計數,2從最后位置開始計數。
      • 第二個參數只能在b模式下改變。在b模式下seek參數一代表的為字節,在utf-8中一個中文字符等於三個字節

寫入文檔

write

語法:文件對象.write(寫入內容)
當文檔處於w、x、a等寫入模式的情況下才能使用write,否則會報錯
write寫入內容時會將寫入的字數作為返回值返回

data = open('text.txt', 'w', encoding='utf-8')
name = '我是尋覓'
data1 = data.write(name)
print(data1) # 4

關閉文件

close

語法:文件對象.close
將使用完的文件及時關閉,能有利於提升程序性能。

with… as…

使用這個函數打開文件使用完后會自動關閉,讓代碼變得更簡潔
語法:with open() as 變量:

with open('text.txt', 'w') as data:
    name = 'My name xun_mi'
    data.write(name)

實例

操作音樂文件

with open('三無MarBlue - 童話鎮(Cover 暗杠).mp3', 'rb') as music:
    r = 1024*100
    data = music.read(r)
    with open('裁剪出的童話鎮.mp3', 'wb') as new:
        new.write(data)

with open('三無MarBlue - 童話鎮(Cover 暗杠).mp3', 'rb') as data:
    while True:
        r = data.read(1024*1000)
        if r == b'':
            break
        with open('新裁剪出的童話鎮.mp3', 'ab') as new:
            new.write(r)

os模塊

os模塊是Python中一個內置的用來操作文件的模塊
下面我們來介紹一些常用方法。

方法 功能
os.listdir(‘路徑,默認文件所在路徑’) 讀取指定路徑目錄結構並作為返回值返回
os.getcwd() 讀取當前文件所在目錄並作為返回值返回
os.chdir ('路徑‘’) 用來改變文件當前所在路徑
os.mkdir(‘目錄名’) 創建目錄
os.rmdir(‘目錄名’) 刪除目錄(只能刪除空目錄,非空目錄會報錯)
os.makedirs('目錄名’) 生成多層目錄
os.removedirs('目錄名’) 刪除多層空目錄(只能刪除空目錄,非空目錄會報錯)
os.rename('原目錄名‘,'新目錄名’) 目錄重命名
os.stat(‘目錄名或文件名’) 讀取目錄或文件信息
os.name 判斷當前系統信息,如果是Windows則返回nt,Linux則返回posix
os.environ 獲取系統變量
os.system('命令語句’) 運行shell命令
import os
# listdir讀取指定路徑目錄結構
data = os.listdir('.')
print(data)

# getcwd讀取當前文件所在目錄
data = os.getcwd()
print(data)

# mkdir創建目錄
os.mkdir('我是os模塊創建的目錄')

# chdir用來改變文件當前所在路徑
os.chdir('./我是os模塊創建的目錄')
data = os.getcwd()
print(data)

# rmdir刪除一層目錄
os.rmdir('我是os模塊創建的目錄')

# makedirs生成多層目錄
os.makedirs('我是os創建的多層目錄\\第二層')

# removedirs刪除多層空目錄
os.removedirs('我是os創建的多層目錄')

# rename重命名文件
os.rename('我是os模塊創建的目錄', '我是經過重命名的文件')

# stat獲取文件或目錄信息
data1 = os.stat('我是os創建的多層目錄')
data2 = os.stat('os模塊.py')
print(data1, data2)

# name輸出當前運行系統環境Windows為nt,Linux為posix
data = os.name


# environ獲取系統變量(發現了有部分中文亂碼情況,但只是部分亂碼,很奇怪)
data = os.environ


# system運行shell命令(發生中文亂碼情況,這是字符編碼問題,默認字符編碼是GBK這個中文編碼,但是很奇怪會亂碼。解決方案1.使用chcp 65001將編碼改變成utf-8)
os.system('chcp 65001')
os.system('dir')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM