xia的小窩

一起來coding和碼字吧

0%

文件及目錄操作

建立和打開文件

建立文件可以使用

1
2
file = open(filename[,mode[,buffering]])
# 默認打開mode => "r"

打開一個不存在的文件時,應該先建立文件

1
2
print("開始建立新文件")
file = open("newfile.txt", "w")

結果

以二進制的方式打開文件

1
2
file = open("test.jpg", "rb")
print(file)

打開文件的一般形式

1
file = open("test.txt", "rw", encoding = "utf-8")

關閉文件

使用close()

1
2
file.close()
# file => 文件名

打開文件時,使用with語句

使用with就可以處理忘記關閉文件的問題

1
2
with expression as target:
with-body

範例

1
2
with open("1.txt", "r", encoding = "utf-8") as file:
pass

寫入文件

使用write()方法

1
file.write("write SomeThing")

使用剛才的範例並追加

1
2
3
file = open("1.txt", "w+", encoding="utf-8")
file.write("我想寫入一些東西進去檔案裡")
file.close()

寫入文件後,一定要關閉文件,否則寫入的內容不會保存到文件中。

讀取文件

讀取指定字符

1
2
3
4
# file.read([size])

file.read()
# 全部印出

使用seek()語法

1
2
file.seek(offset,[,whence])
# whence => 0表示從頭,1表示從當前位置開始計算,2表示從尾巴開始,默認為0

範例

1
2
3
4
5
6
with open("1.txt", "r") as file:
file.seek(5)
string = file.read(5)
print(string)

# offset => 漢字2字符,英文與其他1字符

讀取一行的情況

1
file.readline()

讀取全部

1
file.readlines()

目錄操作

又稱文件夾。用於分層保護文件。

先導入os模組

1
import os

相對路徑

1
2
print(os.getcwd())
# 輸出當前目錄C:\Users\a9132\Desktop\python

在指令路徑時可以在路徑前加上r(R),這樣所有字符都會按原樣輸出。

絕對路徑

1
2
3
4
# os.path.abspath(path)

print(os.path.abspath(r"1.txt"))
# C:\Users\a9132\Desktop\python\1.txt

拼接路徑

1
2
3
4
# os.path.join(path1[,path2...])
print(os.path.join(r"C:\Users\a9132\Desktop", "python\1.txt"))

# C:\Users\a9132\Desktop\python.txt

判斷目錄是否存在

使用exists()函數

1
2
3
# os.path.exists(path)
print(os.path.exists(r"C:\Users\a9132\Desktop"))
# True

建立目錄

建立資料夾

1
2
3
# os.mkdir(path, mode=0o777)
# 建立資料夾
os.mkdir(r"C:\Users\a9132\Desktop\python\test")

建立成功

如果存在…

1
2
3
4
if not os.path.exists(path):
os.mkdir(path)
else:
print("該資料夾已存在")

可以使用makedirs建立資料夾的次級資料夾

1
os.makedirs(name, mode)

刪除目錄

使用rmdir()函數

1
os.rmdir(path)

該函數只能刪除空目錄,如果想刪除非空目錄,就需要使用……

1
2
import shutil
shutil.rmtree(path)

遍歷目錄

使用walk()函數

1
2
3
4
5
6
7
8
# os.walk(top[,topdown][,onerror][,followlinks])
# 返回(dirpath, dirnames, filenames)
# 只在UNIX、windows系統有效

import os
tup = os.walk(path)
for tup1 in tup:
print(tup1, "\n")

結果

刪除文件

使用remove()函數

1
2
3
# os.remove(path)

os.remove(1.txt)

文件重新命名

使用os.rename()函式

1
2
# os.rename("src", "dst")
os.rename("1.txt", "new.txt")

結果

獲取文件基本資訊

使用os.stat()函數

1
2
3
4
5
import os
fileinfo = os.stat("new.txt")

print("最後一次修改時間: ", fileinfo.st_mtime)
# 最後一次修改時間: 1628472453.0625432

同款資訊

1
2
3
4
5
6
7
8
9
10
11
st_mode: inode 保護模式
st_ino:inode節點號。
st_dev: inode 駐留的設備。
st_nlink: inode 的鏈接數。
st_uid: 所有者的用戶ID。
st_gid: 所有者的組ID。
st_size: 普通文件以字節為單位的大小;包含特定特定文件的數據。
st_atime: 上次訪問的時間。
st_mtime: 最後一次修改的時間。
st_ctime:由操作系統報告的“ctime”。在部分系統上(如Unix)是最新的元數據更改時間,在其他系統上(如Windows)是創建時間(詳細信息參見平台的文檔)。
# 取自菜鳥教程