python3的檔案與目錄操作
1.open函式
2.常用的檔案操作
3.用fileinput()操作檔案
4.利用os模組進行目錄操作
4.1獲取當前路徑
4.2獲取目錄內容
4.3建立和刪除目錄
4.4判斷是否目錄,檔案
4.5遍歷某目錄下的所有目錄和檔案
1.open函式
當使用python的內建函式 open() 開啟一個檔案後,就會返回一個 檔案物件,open()常用的格式如下:
f = open(filename,mode)
filename:表示檔名或者檔案路徑
mode:表示開啟檔案的模式,是可選引數,下面列表介紹mode有哪些可以選擇
模式字元 | 表示的操作 |
r | 只讀(預設) |
w | 可寫,但會先清除原來檔案內容 |
a | 追加資料 |
b | 二進位制資料模式 |
x | 新建一個檔案,可寫 |
+ | 開啟檔案直接更新 |
t | 文字模式(預設) |
例項:
def file_open(name = ‘python.txt’):
f = open(name)
2.常用檔案操作
如有:
f = open(filename)
檔案操作 | 功能描述 |
f.read([n]) | 將整個檔案讀入字串中,或指定讀取n個字元 |
f.readline([n]) | 讀取檔案的一行到字串中,或者指定讀取一行的n個字元 |
f.readlines() | 將整個檔案按行讀入到列表中 |
f.write(s) | 向檔案中寫入字串s |
file.writelines(lines) | 向檔案寫入一個行資料列表 |
f.close() | 關閉開啟的檔案 |
如:
f = open('camt.c','rb')
lines = f.readlines()
for line in lines:
print(line.strip().decode('utf-8'))
readlines返回的是一個list列表,list列表中每一項表示檔案中的 一行資料/文字3.用 fileinput操作檔案 ( 要先匯入fileinput模組:import fileimput )
作用:fileinput可以同時對一個或多個檔案中的內容進行迭代,遍歷等操作。該模組的 input() 方法有點類似檔案的 readlines()方法,區別是前者只是迭代一個物件,每次只生成一行,而後者是一次性讀取所有行,當遇到大檔案時,無疑前者更有效率。
fileinput的常用可選引數:
inplace:用於決定print輸出到哪,若inplace = 0,print 則輸出到螢幕(即標準輸出),若inplace = 1,則把print 結果寫到檔案,預設情況下 inplace = 0
backup:指定備份檔案的副檔名,如.bak,若備份檔案存在,則覆蓋
fileinput模組中常用的函式有:
函式 | 功能 |
input() | 返回能夠用於迭代 一個或多個檔案中所有行 的物件(可以給input傳入一個列表) |
filename() | 返回當前檔案的名稱 |
lineno() | 返回當前讀取的行的數量 |
isfirstline() | 返回當前行是否檔案的第一行 |
filelineno() | 返回當前讀取行在檔案中的行數 |
示例一:(開啟單個檔案)
import fileinput
with fileinput.input('1.txt') as lines:
for line in lines:
print(line.strip())
'''
C
C++
C#
java
python
'''
示例二:(批量處理 txt檔案)
import fileinput
#1.txt
C
C++
C#
#2.txt
java
python
#程式
def process(line):
return (line.rstrip()+ ' language')
for line in fileinput.input(['1.txt','2.txt'],inplace=1):
print(process(line))
'''
執行結果:
1.txt:
C language
C++ language
C# language
2.txt:
java language
python language
'''
示例三:(利用fileinput把檔案內容替換,並把原有檔案備份)
import fileinput
'''
樣本檔案:1.txt:
C
C++
C#
'''
for line in fileinput.input('1.txt',inplace=1,backup='.bak'):
print(line.rstrip().replace('C++','Java'))
'''
執行後的1.txt:
C
Java
C#
並生成一個 1.txt.bak備份檔案
'''
4.利用os模組進行目錄操作
Python提供的 os 模組提供了很多對檔案或目錄進行操作的函式,可以方便地對檔案進行重新命名,增加/刪除目錄,複製目錄等操作。
4.1獲取當前路徑
os.getcwd():打印出程式所在的目錄
import os
print(os.getcwd())
#列印結果:C:\Users\abc\PycharmProjects\untitled3
4.2獲取目錄中的內容
os.listdir(path):列出目錄路徑path下有哪些檔案,若不寫path,則預設為當前目錄
import os
print(os.listdir())
4.3建立和刪除目錄
os.mkdir(path):path為要建立的目錄路徑
如在當前目錄下建立一個new目錄:
import os
os.mkdir('new')
同理,刪除目錄為:
os.rmdir(path)
4.4判斷是否目錄,檔案
os.path.isdir(path) :path為要判斷的路徑,返回True or False
os.path.isfile(path):path為要判斷的路徑,返回True or False
4.5遍歷某目錄下的所有檔案和目錄
python中可以使用 os.walk(path) 函式,
os.walk(path)的輸出:
os.walk()遍歷目錄後輸出的格式為多個元組,每個元組第一項為遍歷的目錄名 , 第二項為遍歷目錄中的子目錄列表,第三項為遍歷目錄中所有檔案的列表。
示例一:
import os
for i in os.walk(r'./'): #對當前目錄進行遍歷
print(i)
'''
列印結果:
('./', ['.idea', 'new'], ['1', '1.jsp', '1.txt', '1.txt.bak', '2.txt', 'camt.c'])
('./.idea', [], ['.name', 'encodings.xml', 'misc.xml', 'modules.xml', 'untitled3.iml', 'workspace.xml'])
('./new', ['新建資料夾'], ['新建文字文件.txt'])
('./new\\新建資料夾', [], ['新建 RTF 文件.rtf'])
'''
示例二:
由於os.walk() 的輸出是分三塊的(遍歷的目錄,遍歷到的目錄名,遍歷到的檔名),因此接收 os.walk()元組時也可以用三個引數來接受,分別裝三塊的資料。
如下程式,我只打印出在當前路徑下能遍歷到的所有檔案:
import os
for path,dir,file in os.walk(r'./'): #對當前目錄進行遍歷
#print(path)
#print(dir)
print(file)
'''
列印結果:
['1', '1.jsp', '1.txt', '1.txt.bak', '2.txt', 'camt.c']
['.name', 'encodings.xml', 'misc.xml', 'modules.xml', 'untitled3.iml', 'workspace.xml']
['新建文字文件.txt']
['新建 RTF 文件.rtf']
'''