Python文件操作

本文介紹如何使用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' 表示追加领追。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市响逢,隨后出現(xiàn)的幾起案子绒窑,更是在濱河造成了極大的恐慌,老刑警劉巖舔亭,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件些膨,死亡現(xiàn)場離奇詭異,居然都是意外死亡钦铺,警方通過查閱死者的電腦和手機订雾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矛洞,“玉大人洼哎,你說我怎么就攤上這事≌颖荆” “怎么了噩峦?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抽兆。 經(jīng)常有香客問我识补,道長,這世上最難降的妖魔是什么辫红? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任凭涂,我火速辦了婚禮,結果婚禮上贴妻,老公的妹妹穿的比我還像新娘切油。我一直安慰自己,他們只是感情好揍瑟,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布白翻。 她就那樣靜靜地躺著乍炉,像睡著了一般绢片。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岛琼,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天底循,我揣著相機與錄音,去河邊找鬼槐瑞。 笑死熙涤,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播祠挫,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼那槽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了等舔?” 一聲冷哼從身側響起骚灸,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慌植,沒想到半個月后甚牲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡蝶柿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年丈钙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片交汤。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡雏赦,死狀恐怖,靈堂內的尸體忽然破棺而出芙扎,到底是詐尸還是另有隱情喉誊,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布纵顾,位于F島的核電站伍茄,受9級特大地震影響,放射性物質發(fā)生泄漏施逾。R本人自食惡果不足惜敷矫,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望汉额。 院中可真熱鬧曹仗,春花似錦、人聲如沸蠕搜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妓灌。三九已至轨蛤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虫埂,已是汗流浹背祥山。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留掉伏,地道東北人缝呕。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓澳窑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親供常。 傳聞我的和親對象是個殘疾皇子摊聋,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容

  • Hi,大家好栈暇。我是茶桁栗精。 在之前的幾節(jié)課程中,我們學習了Python的數(shù)據(jù)類型瞻鹏。和市面上大多數(shù)的Python教程不...
    茶桁閱讀 100評論 0 0
  • 文件操作 文件操作包含:打開悲立、關閉、讀新博、寫薪夕、復制.. 目的:讀取內容、寫入內容赫悄、備份內容 文件操作就是把一些內容(...
    桔Bu閱讀 323評論 0 1
  • 一. Python 讀寫 創(chuàng)建文件 Python中對文件,文件夾(文件操作函數(shù))的操作需要涉及到OS 模塊和 sh...
    月亮是我踢彎得閱讀 610評論 0 1
  • 我們目前的操作都是很直觀地執(zhí)行程序原献,要么是在交互模式下執(zhí)行,要么是執(zhí)行py文件埂淮,還沒有涉及對文件的操作姑隅。運行程序時...
    瀧汰泱閱讀 1,119評論 0 0
  • Python文件操作 準備工作: 1) 使用python來讀取文件是非常簡單的操作,我們使用open()函數(shù)來打開...
    小學弟_閱讀 510評論 0 0