1 Pathlib
讀取數(shù)據(jù) 文件為對象的操作
1) 獲取特定父級目錄
from pathlib2 import Path
current_path = Path.cwd()
for p in current_path.parents:?
? ? ? print(p)
2) 如何處理一個很長的文件名呢
常用的文件名操作屬性如下:
name 目錄的最后一個部分
suffix 目錄中最后一個部分的擴展名
suffixes 返回多個擴展名列表
stem 目錄最后一個部分,沒有后綴
with_name(name) 替換目錄最后一個部分并返回一個新的路徑
with_suffix(suffix) 替換擴展名,返回新的路徑,擴展名存在則不變
3)路徑拼接和分解
#直接傳進(jìn)一個完整字符串
example_path1 = Path('/Users/Anders/Documents/powershell-2.jpg')
#也可以傳進(jìn)多個字符串
example_path2 = Path('/', 'Users', 'dongh', 'Documents', 'python_learn', 'pathlib_', 'file1.txt')
#也可以利用Path.joinpath()
example_path3 = Path('/Users/Anders/Documents/').joinpath('python_learn')
# #利用 / 可以創(chuàng)建子路徑
example_path4 = Path('/Users/Anders/Documents')
example_path5 = example_path4 / 'python_learn/pic-2.jpg'
4)遍歷文件夾
我們可以在路徑對象后面直接使用**iterdir()**方法,該方法返回一個生成器,我們可以循環(huán)遍歷出所有指定目錄下的目錄路徑。
# 返回目錄中最后一個部分的擴展名
example_path = Path('/Users/Anders/Documents')
[path for path in example_path.iterdir()]
# 輸出# [PosixPath('/Users/Anders/Documents/abc.jpg'),
#? PosixPath('/Users/Anders/Documents/book-master'),
5) 文件操作 核心
open方法就可以,它的操作語法是:open(mode=‘r’, bufferiong=-1, encoding=None, errors=None, newline=None)
對于簡單的文件讀寫,在pathlib庫中有幾個簡便的方法:
.read_text(): 以文本模式打開路徑并并以字符串形式返回內(nèi)容蹬蚁。
.read_bytes(): 以二進(jìn)制/字節(jié)模式打開路徑并以字節(jié)串的形式返回內(nèi)容。
.write_text(): 打開路徑并向其寫入字符串?dāng)?shù)據(jù)郑兴。
.write_bytes(): 以二進(jìn)制/字節(jié)模式打開路徑并向其寫入數(shù)據(jù)
創(chuàng)建文件夾和刪除文件夾
關(guān)于這里的創(chuàng)建文件目錄mkdir方法接收兩個參數(shù):
parents:如果父目錄不存在犀斋,是否創(chuàng)建父目錄。
exist_ok:只有在目錄不存在時創(chuàng)建目錄杈笔,目錄已存在時不會拋出異常闪水。
判斷文件及文件夾對象是否存在
關(guān)于文件的判斷還有很多相關(guān)屬性,羅列如下:
is_dir() 是否是目錄
is_file() 是否是普通文件
is_symlink() 是否是軟鏈接
is_socket() 是否是socket文件
is_block_device() 是否是塊設(shè)備
is_char_device() 是否是字符設(shè)備
is_absolute() 是否是絕對路徑
resolve() 返回一個新的路徑蒙具,這個新路徑就是當(dāng)前Path對象的絕對路徑球榆,如果是軟鏈接則直接被解析
absolute() 也可以獲取絕對路徑,但是推薦resolve()
文件的信息
只需要通過**.stat()**方法就可以返還指定路徑的文件信息
exists() 該路徑是否指向現(xiàn)有的目錄或文件:
6) 實例操作
找到一個路徑內(nèi)所有子路徑的csv文件禁筏,并且讀取隨機20個生成一個csv
csv_generator = pathlib.Path ("data/TVF/").glob(**/*.csv)
random.seed(0)
csv_list = random.sample( list(csv_generator), 20)
df = pd.Dataframe(csv_list,columns = [ csv_name'] )
df.to_csv('csv_list.csv')