最近一直在與資料集的讀取和處理打交道,不可避免的會用到python中檔案處理的知識點,有些函式和知識點雖然知道是怎麼回事,但是感覺掌握的還不是很牢靠,因此打算整理一下知識點,方便以後自己檢視。
在os模組下有很多檔案處理的指定,比如檔案的讀取和寫入等命令,下面就簡單介紹幾個常見的命令。
# open()函式簽名
'r'表示僅讀取檔案內容,如果你向檔案中寫入資料的話,會報錯 'io.unsupportedoperation: not writable'
'w'表示先清空檔案內容,然後再寫入資料
'a'表示在原文的末尾追加資料
模式'w+'和'w+b'表示將開啟檔案並清空檔案內容。模式'r+'與'r+b'表示開啟檔案內容但是並不清空內容,這表示你可以對檔案內容進行更新,可以寫入或者更改內容,並不會報錯。模式'a+'與'a+b'表示開啟檔案讓後在後面追加內容。
開啟檔案之後,我們可以使用一下三種方法讀取檔案的內容
with open('./test.txt') as f:
content = f.read()
# 可以配合split()函式將內容進行分割
content1 = f.read().split('/n')
with open('./test.txt') as f:
lines = f.readlines()
# 可以迴圈索引列表中的內容,並進行列印
lies = [int(i) for i in lines]
with open('./test.txt') as f:
while true:
line = f.readline()
if len(line):
print(line)
# 讀取結束
else:
break
write()函式可以向檔案中寫入字串資料(注意一定是字串資料)
with open('./test.txt') as f:
# 向檔案中寫入資料
f.write('hello world')
# 函式簽名
os.walk(top, topdown=true, onerror=none, followlinks=false)
# step1: '../data'檔案的目錄是這樣的
# step2: 遍歷資料夾,然後列印
for root_path, sub_dir_path, files_path in os.walk('../data'):
# (1)列印root_path:結果是'../data'和'../data/obj'
print(root_path)
# (2) 列印sub_dir_path: 結果是['obj']和
print(sub_dir_path)
# (3)遍歷files_path列表中所有xml檔案: 列印結果['image1.xml']
for file_path in files_path:
if file_path.endswith('xml'):
print(file_path)
root_path表示要遍歷的資料夾位址,在案例中是'../data'和'./data/obj'。因為該資料夾下仍然存在資料夾,所以依然會對子資料夾進行遍歷。
sub_dir_path表示當前資料夾下的子資料夾名稱,如果子資料夾中還存在檔案,依然迴圈列印其子檔名稱。
files_path表示當前資料夾下檔案的名稱,如果子資料夾中存在檔案,依然將其子檔案中的子檔案放在列表中進行列印。
os.listdir()函式可以獲得某個資料夾下所有檔案和資料夾的名稱(不是位址)
for path in os.listdir('../data'):
print(path)
# 輸出結果就是
# obj
# obj.data
# obj.names
在使用os.walk()函式的時候,我們可以獲得資料夾的路徑以及檔案的名稱,而在資料集中,我們需要儲存檔案的絕對路徑或者是包含當前根目錄的相對路徑,因此我們就需要對檔案位址進行拼接。
在拼接路徑的時候,我們可以使用下面os.path.join()函式,下面說明了使用該函式的注意點(借鑑了這位老哥的部落格)
1.如果各元件名首字母不包含』/』,則函式會自動加上
2.如果有乙個元件是乙個絕對路徑,則在它之前的所有元件均會被捨棄
3.如果最後乙個元件為空,則生成的路徑以乙個』/』分隔符結尾
# 案例1:如果各元件名首字母不包含』/』,則函式會自動加上
path1 = 'home'
path2 = 'develop'
path3 = 'code'
print(os.path.join(path1,path2,path3))
# 輸出是:
# home\develop\code
# 案例2:如果有乙個元件是乙個絕對路徑,則在它之前的所有元件均會被捨棄
# 這一點一定要注意!!!!!
path1 = 'home'
path2 = '/develop'
path3 = 'code'
print(os.path.join(path1,path2,path3))
# 輸出是:
# /develop/code
# 案例3:如果最後乙個元件為空,則生成的路徑以乙個』/』分隔符結尾
path1 = '/home'
path2 = 'develop'
path3 = ' '
print(os.path.join(path1,path2,path3))
# 輸出是:
# /home/develop/
linux 常見檔案處理命令
linux系統資訊存放在檔案裡,檔案與普通的公務檔案類似。每個檔案都有自己的名字 內容 存放位址及其它一些管理資訊,如檔案的使用者 檔案的大小等。檔案可以是一封信 乙個通訊錄,或者是程式的源語句 程式的資料,甚至可以包括可執行的程式和其它非正文內容。linux檔案系統具有良好的結構,系統提供了很多檔...
python中常見的資料預處理方法
以下通過sklearn的preprocessing模組 from sklearn.preprocessing import standardscaler 變換後各維特徵有0均值,單位方差。也叫z score規範化 零均值規範化 計算方式是將特徵值減去均值,除以標準差。1 sklearn.prepro...
python中常見錯誤
1.手誤造成的名字錯誤 nameerror 名字錯誤 如 nameerror name pint is not defined 2.多行 不能一行寫 syntaxerror 語法錯誤 如 syntaxerror invalid syntax 3.縮排錯誤 indentationerror unexp...