本文介紹如何使用Python實現(xiàn)對文件间涵、目錄以及壓縮包的操作仁热。
一、文件操作
1、創(chuàng)建文件
with open("example.txt", "w") as file:
# 在這里進行文件操作
pass
2抗蠢、刪除文件
如果文件不存在举哟,將會拋出文件不存在的異常。注意只能刪文件迅矛,如果給了一個文件夾路徑則會報錯妨猩。
import os
try:
os.remove('example.txt')
print('文件刪除成功')
except Exception as e:
print('文件刪除失敗', e)
3、拷貝文件
import shutil
shutil.copy('example.txt','./new_folder')
shutil.copy('example.txt','./new_folder/new_file.txt')
兩種實現(xiàn)方案:
- 第二個參數(shù)寫某個文件夾位置秽褒,則復制到該文件夾下;
- 第二個參數(shù)寫文件路徑壶硅,復制到這個路徑并且重命名。
4销斟、移動文件
import shutil
shutil.copy('example.txt','./new_folder/')
shutil.move('example.txt','new_folder/new_file.txt')
兩種方式使用:
- 第二個參數(shù)是文件夾位置庐椒,則移動到文件夾下面
- 第二個參數(shù)是文件路徑,移動到這個路徑并且重命名
注意:如果是文件夾后面一定要加'/'
蚂踊。
5约谈、重命名文件
import os
os.rename('old_file.txt','new_file.txt')
6、查詢文件
(1)字符串內置方法
.startswith()
,.endswith()
(2)glob模塊
import glob
print(glob.glob('*.py'))
print(glob.glob('**/*.txt',recursive=True))
模式 | 意義 |
---|---|
* | 匹配所有 |
? | 匹配任何單個字符 |
[seq] | 匹配seq中的任何字符 |
[!seq] | 匹配任何不在seq中的字符 |
用
**
表示任意層文件或文件夾 recursive=True會不斷進入文件夾內
7犁钟、打印文件信息
import os
for file in os.scandir('./'):
print(file.stat())
os.scandir()
返回的文件都可以查詢信息
- st_size: 文件的體積大欣庥铡(單位:bytes),除以10024就是KB
- st_atime: 文件的最近訪問時間
- st_mtime:文件的最近修改時間
- st_ctime:Windows下表示創(chuàng)建時間
- st_birthtime:只在Mac涝动、Linux下可用迈勋,表示創(chuàng)建時間
8、讀文件
(1)read()方法
read()方法用于讀取整個文件的內容捧存,并將其存儲為一個字符串粪躬。
file = open('example.txt', 'r')
content = file.read()
print(content)
(2)readlines()方法
readlines()方法用于讀取整個文件的內容担败,并將其存儲為一個列表昔穴,列表中的每個元素表示文件中的一行。
file = open('example.txt', 'r')
lines = file.readlines()
for line in lines:
print(line)
(3) readline()方法
readline()方法用于讀取文件的一行內容提前,并將其存儲為一個字符串吗货。
file = open('example.txt', 'r')
line = file.readline()
print(line)
4、寫文件
文件讀寫模式:
打開模式 | 文件類型 | 方式 | 對已有文件影響 | 如果文件不存在 | 備注 |
---|---|---|---|---|---|
r | 文本 | 只讀 | 無 | 拋異常 | write等方法不可用 |
rb | 二進制 | 只讀 | 無 | 拋異常 | write等方法不可用 |
r+ | 文本 | 讀寫 | 追加 | 拋異常 | 無 |
rb+ | 二進制 | 讀寫 | 追加 | 拋異常 | 無 |
w | 文本 | 只寫 | 覆蓋并新建 | 新建 | read等方法不可用 |
wb | 二進制 | 只寫 | 覆蓋并新建 | 新建 | read等方法不可用 |
w+ | 文本 | 讀寫 | 覆蓋并新建 | 新建 | 因為覆蓋原來文件狈网,read等方法獲取到原文件的內容 |
wb+ | 二進制 | 讀寫 | 覆蓋并新建 | 新建 | 因為覆蓋原來文件宙搬,read等方法獲取到原文件的內容 |
a | 文本 | 追加 | 追加到最后 | 新建 | read等方法不可用 |
ab | 二進制 | 追加 | 追加到最后 | 新建 | read等方法不可用 |
a+ | 文本 | 讀寫 | 追加到最后 | 新建 | 無 |
ab+ | 二進制 | 讀寫 | 追加到最后 | 新建 | 無 |
(1)寫入字符串數(shù)據(jù)
# 寫入字符串數(shù)據(jù)
with open("example.txt", "w") as file:
file.write("Hello, World!\n")
file.write("This is a new line.")
(3)寫入字節(jié)數(shù)據(jù)
- 使用
write()
方法將字節(jié)數(shù)據(jù)寫入文件。 - 可以使用
encode()
方法將字符串轉換為字節(jié)數(shù)據(jù)進行寫入拓哺。
# 寫入字節(jié)數(shù)據(jù)
with open("example.txt", "wb") as file:
content = "Hello, World!\n"
file.write(content.encode("utf-8"))
(4)writelines()
寫入list內容勇垛,不會在元素之間自動添加換行符。
with open('example.txt','w',encoding='utf-8') as f:
lines = [
'春夜喜雨\n',
'杜甫 [唐代]\n',
'好雨知時節(jié)士鸥,當春乃發(fā)生闲孤。\n',
'隨風潛入夜,潤物細無聲烤礁。\n',
'野徑云俱黑讼积,江船火獨明肥照。\n',
'曉看紅濕處,花重錦官城勤众。\n']
f.writelines(lines)
二舆绎、目錄操作
1、遍歷文件夾
(1)列出當前文件夾下所有的文件和文件夾
import os
os.listdir()
os.listdir('指定目錄')
for file in os.scandir():
print(file.name, file.is_dir())
判斷文件還是文件夾:
import os
os.path.isdir('example')
os.path.isfile('example')
(2)遍歷目錄下所有的文件
import os
for dirpath, dirnames, files in os.walk('./'):
print(f'發(fā)現(xiàn)文件夾:{dirpath}')
print(files)
dirpath 是文件夾路徑们颜; dirnames是dirpath這個文件夾下的子文件夾列表吕朵; files是dirpath這個文件夾里的文件列表。
2窥突、創(chuàng)建文件夾
(1)創(chuàng)建單層文件夾
import os
os.mkdir('新文件夾')
放文件夾已經(jīng)存在時運行這句代碼會報錯边锁,FileExisitsError
。
import os
if not os.path.exists('新文件夾'):
os.mkdir('新文件夾')
只有當文件夾不存在的時候創(chuàng)建文件夾波岛。
(2)創(chuàng)建多層文件夾
import os
os.makedirs('第一層文件夾/第二層文件夾/第三層文件夾')
當最里層文件夾已經(jīng)存在時(第三層)運行這句代碼會報錯茅坛。
3、刪除文件夾
import shutil
shutil.rmtree('文件夾')
4则拷、復制文件夾
import shutil
shutil.copytree('文件夾1','文件夾2')
會將文件夾內的所有文件和文件夾都復制過去贡蓖,新的文件夾不能已經(jīng)存在。
5煌茬、移動文件夾
shutil.move(要移動的文件/文件夾,要移動的位置)
import shutil
shutil.move('folder_1','new_folder/')
shutil.move('folder_2','new_folder')
兩種方式使用:
- 第二個參數(shù)是文件夾位置斥铺,則移動到文件夾下面
- 第二個參數(shù)是文件路徑,移動到這個路徑并且重命名
注意:如果是文件夾后面一定要加'/'
坛善。
6晾蜘、重命名文件夾
import os
os.rename('old_folder','new_folder')
7、查找文件夾
字符串內置方法:.startswith()
,.endswith()
8眠屎、路徑拼接(解決跨平臺問題)
Windows中采用反斜杠()作為作為文件夾之間的分隔符剔交; Mac和Linux中采用正斜杠(/)作為文件夾之間的分割符。
為了解決跨平臺的不一致改衩,使用os模塊下的系統(tǒng)函數(shù)進行拼接:
import os
os.path.join('MyApp', 'service')
Windows:
MyApp\\service
, Mac和LinuxMyApp/service
三岖常、壓縮文件
1、讀取壓縮文件
import zipfile
with zipfile.ZipFile('壓縮包.zip','r') as zipobj:
print(zipobj.namelist())
亂碼情況處理:
for file_name in zipodj.namelist():
print(file_name.encode('cp437').decode('gbk'))
2葫督、獲取壓縮包文件信息
import zipfile
with zipfile.ZipFile('壓縮包.zip','r') as zipobj:
for file_name in zipobj.namelist():
info = zipobj.getinfo(file_name)
print(info.file_size,info.compress_size)
file_size
是原始文件的大小竭鞍,compress_size
是壓縮后大小,輸出單位為字節(jié)橄镜。
3偎快、解壓壓縮包
zipobj.extract(壓縮包要解壓的文件名,解壓到的位置)
import zipfile
with zipfile.ZipFile('壓縮包.zip','r') as zipobj:
zipobj.extract('壓縮包內壓縮的文件名','解壓到的指定目錄')
中文名字解壓后會出現(xiàn)亂碼 亂碼解決:
for file_name in zipobj.namelist():
correct_path = file_name.encode('cp437').decode('gbk')
建議路徑中文件和文件夾不要出現(xiàn)中文洽胶。 如果有中文可以現(xiàn)貨區(qū)正確的編碼文字晒夹,再重命名。
4、提取壓縮包文件
默認當前路徑:
import zipfile
with zipfile.Zipfile('壓縮包.zip','r') as zipobj:
zipobj.extractall()
帶密碼的壓縮文件解壓:
import zipfile
with zipfile.Zipfile('壓縮包.zip','r') as zipobj:
zipobj.extractall(path='指定解壓目錄',pwd=b'設置的密碼')
5惋戏、創(chuàng)建壓縮包
import zipfile
file_list = ['1.txt','2.txt','3.txt']
with zipfile.ZipFile('壓縮成的壓縮包名稱.zip','w') as zipobj:
for file in file_list:
zipobj.write(file)
mode='a' 表示追加领追。