Python:文件操作
一、文件打開方式
格式:open(file, mode = ‘r‘, buffering = -1, encoding = None, errors = None, newline = None, closefd = True, open = None)
==>一般常用file、mode兩個參數;
#file:被打開文件所在地址 + 文件名;若只有文件名,認為是在當前目錄下打開文件(正則執行的.py文件所有文件夾);默認位置為當前;
#mode:文件打開的模式;
模式 | 執行操作 |
‘r’ | 以只讀方式打開文件(默認);#若文件不存在,報異常,不新建; |
‘w’ | 以寫入的方式創建新文件;#若文件名存在,將其覆蓋; |
‘x’ | 新建文件;#如果文件存在,引發異常; |
‘a’ | 以寫入方式打開文件;#若文件存在,可在文件後追加內容;若文件不存在,新建文件; |
‘b’ | 以二進制模式打開文件;#如‘rb’、‘wb’、‘ab’、‘xb’等; |
‘t’ | 以文本模式打開文件(默認); |
‘+’ | k可讀寫模式;(添加到其它模式中使用) |
‘U’ | 通用換行符支持 |
f = open(‘test.txt‘, ‘w‘) s = ‘這小夥真帥‘ f.write(s) f.close f = open(‘test.txt‘) print(type(f)) #輸出:<class ‘_io.TextIOWrapper‘>#_io.TextIOWrapper:是什麽意思? print(list(f)) #輸出:[‘這小夥真帥‘]
二、文件對象的方法
文件對象的方法 | 執行操作 | 語法格式 |
close() | 關閉文件; | f.close() |
read(size = -1) |
從文件中讀取size個字符(不是字節),若未給定size值或給負值時, 讀取剩余的(從文件指針位置)所有字節然後做為字符串返回; |
f.read(n): 從指針位置起,讀取n個字節 |
readline() | 從文件指針位置開始,讀取一整行字符串;#一整行:以換行符 ‘\n’ 來分行; | f.read() |
write(str) |
將字符串寫入文件; #所寫入的數據必須是字符串; | f.write(‘字符串‘) |
writelines(sep) | 向文件寫入字符串序列sep;#sep是一個返回字符串的可叠代對象,不是字符串本身; | f.writelines(字符串的可叠代對象) |
seek(offset, from) |
移動文件指針;#從offset(0/1/2)處,偏移from個字節; #0代表文件起始位置;1代表指針當前位置;2代表文件末尾; #from為具體的正整數; |
f.seek(1, size): #從當前指針位置移動size個字節; |
tell() | 返回指針當前位置;#結果為正整數,表示指針距離文件起始位置的字節數; | f.tell() |
#文件指針:相當於一個‘書簽’,對文件進行引索、讀取、寫入時,從指針位置開始操作;
#一個字符是1個字節;一個漢字是2個字節;
#文件本身可以看做是一個字符串,讀取文件時,返回文件對象,可以被叠代操作,與字符串叠代操作一樣;
f = open(‘test.txt‘, ‘w‘) for i in f: print(i) #輸出:這小夥真帥
三、python文件系統方法
1)OS模塊中關於文件/目錄常的函數
#對於文件系統的訪問,Python一般通過OS模塊來實現;
#Python是誇平臺的語言:同樣的源代碼在不同的操作系統上執行時,不需要修改;
#OS:系統模塊;(Operating System)
#使用OS模塊下的方法前,先導入OS模塊:import os
OS模塊中關於文件/目錄常的函數
函數名 | 功能 | 語法格式 |
getcwd() | 返回當前工作目錄;#即當前工作的物理地址 | os.getcwd() |
chdir(path) | 改變工作目錄;#path指代需要切換到的目錄 | os.chdir(path) |
listdir(path = ‘.‘) |
l列舉指定目錄中的文件名(包含文件夾的名字),其中文件名帶格式(如‘.py‘、‘.txt‘),以[‘str1‘, ‘str2‘]形式返回; #‘.‘:表示當前工作目錄,也是默認值; #‘..‘:表示工作目錄的上一層目錄; #path指定具體地址,如(‘E:\pythonwj‘):返回指定地址下的文件名; |
os.listdir(path = ‘.‘) |
mkdir() | 在當前工作目錄下,創建單個文件夾(不是文件);#如果文件夾已存在,拋出異常; | os.mkdir() |
makedirs(path) |
在指定目錄下,創建多層文件夾;#如果文件夾已存在,拋出異常; #例1:os.makedirs(r‘.\a\b\c‘):a在當前工作目錄下,b在a文件夾下,c在b文件夾下; #r‘.\a\b\c‘:要加r,表示原始字符串;若在當前工作目錄下創建,要加 ‘.\‘ ; #例2:os.makedirs(r‘E:\pythonwj\a\b\c‘) |
os.makedirs(path) |
remove(path) | 刪除當前工作目錄下指定的文件;#不是文件夾 | os.remove(path) |
rmdir(path) | 刪除當前工作目錄下指定的單層文件夾;#文件下不在有其它文件; | os.rmdir(path) |
removedirs(path) |
刪除當前工作目錄下指定的多層文件;#連同文件夾下的其它文件夾同時刪除; #os.removedirs(r‘a\b\c‘):刪除當前工作目錄下的a文件夾,以及a文件夾下的b、c文件夾; |
os.removedirs(path) |
rename() |
重命名當前工作目錄下的文件夾或文件; #os.rename(‘文件名1/文件夾名1‘, ‘文件名2/文件夾名2‘): ==>將當前目錄下的文件1/文件夾1,更名為 文件2/文件夾2 |
os.rename(name1,name2) |
system() |
s使用系統的小工具; #例:os.system(‘calc‘):打開系統的計算器; |
os.system(‘小工具代碼‘) |
walk(top) |
遍歷top參數指定路徑下的所有子目錄,並將結果返回一個三元組(路徑, [包含目錄], [包含文件]) #top:需要遍歷的頂級目錄的路徑; |
os.walk(top) |
擴展:
os.curdir表示當前目錄(‘.‘);
os.pardir表示上一級目錄(‘..‘);
os.sep表示路徑的分隔符,比如Windows系統下為‘\\’,Linux系統下為‘/’;
os.linesep表示當前平臺使用的行中支符;(Windows下為‘\r\n’,Linux下為‘\n’)
os.name表示當前使用的操作系統;
import os print(os.sep) #輸出:\
#walk(top)用法,及與os.path.walk()的區別,參見:Python:os.walk()和os.path.walk()用法
實例:
import os for i in os.walk(r‘E:\pythonwj‘): print(i) #輸出: # (‘E:\\pythonwj‘, [‘Chapter_2‘, ‘Chapter_3‘, ‘Chapter_4‘, ‘Chapter_5‘, ‘Chapter_6‘], []) # (‘E:\\pythonwj\\Chapter_2‘, [], [‘0_0.py‘, ‘2_1.py‘, ‘2_2.PY‘, ‘2_3.py‘]) # (‘E:\\pythonwj\\Chapter_3‘, [], [‘0-0.py‘, ‘3-1.py‘, ‘3-3-1.py‘, ‘3-3-2.py‘, ‘3-4.py‘, ‘3-5.py‘]) # (‘E:\\pythonwj\\Chapter_4‘, [], [‘0-0.py‘, ‘0.py‘, ‘00.py‘, ‘4-1.py‘, ‘4-2.py‘, ‘4-4.py‘, ‘4-5.py‘, ‘4-6.py‘, ‘record.txt‘, ‘test.txt‘, ‘test_1.txt‘, ‘test_2.txt‘, ‘test_3.txt‘, ‘txt‘test_2.txt‘, ‘test_3.txt‘, ‘txt.py‘]) # (‘E:\\pythonwj\\Chapter_5‘, [], []) # (‘E:\\pythonwj\\Chapter_6‘, [], [])
二)os.path模塊中關於路徑常用的函數
函數名 | 功能及使用方法 |
basename(path) | 去掉目錄路徑,單獨返回文件名 |
dirname(path) | 去掉文件名,單獨返回目錄路徑; |
join(path1[, path2[, ...]]) | 將path1和path2各部分組合成一個路徑名 |
split(path) |
分割文件名和路徑,返回(f_path, f_name)元組; #如果完全使用目錄,它也會將最後一個目錄作為文件名分離,且不會判斷文件或者目錄是否存在; |
splitext(path) | 分離文件名和擴展名,返回(f_name, f_extension)元組; |
getsize(file) | 返回指定文件的尺寸,單位字節; |
getatime(file) | 返回指定文件最近訪問的時間:浮點型秒數;(可用time模塊的gmtime()或者localtime()函數換算) |
getctime(file) | 返回指定文件的創建時間:浮點型秒數;(可用time模塊的gmtime()或者localtime()函數換算) |
getmtime(file) | 返回指定文件最新的修改時間:浮點型秒數;(可用time模塊的gmtime()或者localtime()函數換算) |
以下函數返回True或False
函數名 | 功能與使用方法 |
exists(path) | 判斷指定路徑(目錄或者文件)是否存在 |
isabs(path) | 判斷指定路徑是否為絕對路徑 |
iadir(path) | 判斷指定路徑是否存在且是一個目錄 |
iafile(path) | 判斷指定路徑是否存在且是一個文件 |
islink(path) | 判斷指定路徑是否存在且是一個符號鏈接 |
ismount(path) | 判斷指定路徑是否存在且是一個掛載符 |
samefile(path1, path2) | 判斷path1和path2兩個路徑是否指向同一個文件 |
Python:文件操作