目錄
文件常見操作
"""
文件常見操作都包含在模塊中
2個文件:
rename 重命名文件
remove 刪除文件
5個文件夾:
mkdir 創建文件夾
getcwd 獲取當前路徑
chdir 切換當前路徑
listdir 列出當前路徑中的內容
rmdir 刪除
"""
import os
# 1、重命名文件 rename
os.rename('C:/Users/32022/Desktop/2.png', 'C:/Users/32022/Desktop/22.png')
# 2、刪除文件 remove
os.remove('11.txt')
# 3、創建文件夾 mkdir
os.mkdir('demo')
# 4、獲取當前路徑 getcwd
print(os.getcwd())
# 5、切換當前路徑 chdir
os.chdir('demo')
print(os.getcwd())
os.mkdir('demo1')
# 6、列出當前路徑中的內容listdir 相當於ls,可指定文件夾
data = os.listdir()
print(data)
# 7、刪除空文件夾rmdir
os.rmdir('demo')
文件讀寫
"""
文件中的數據會保存到硬盤中(斷電不丟失);將數據保存到硬盤中,稱爲 數據持久化
"""
"""
讀寫文件前,我們先必須瞭解一下,在磁盤上讀寫文件的功能都是由操作系統提供的,現代操作系統不允許普通的程序直接操作磁盤,
所以,讀寫文件就是請求操作系統打開一個文件對象;
通過操作系統提供的接口 從這個文件對象 中讀取數據(讀文件),或者把數據寫入這個文件對象(寫文件)。
"""
'''
♥ r : 默認訪問模式
1> 只讀模式;
2> 文件不存在報錯;
'''
# 4種讀法:如果文件很小,read()一次性讀取最方便;如果不能確定文件大小,反覆調用read(size)比較保險;如果是配置文件,調用readlines()最方便:
# read():將文件中內容全部取出來
# read(size):讀取size個字節的內容
# readline() :讀取一行數據 ★主要使用這個方法, 有效的避免出現內存峯值
# readlines():讀取所有的行,每行內容作爲一個元素
# read() 將文件中內容全部取出來
with open('123.txt', encoding='utf-8') as f:
content = f.read()
print(content)
# read(size) 讀取指定大小的 字節 數量
with open('123.txt', encoding='utf-8') as f:
content = f.read(3)
print(content, end='')
# readline() 讀取一行數據
with open('123.txt', encoding='utf-8') as f:
content = f.readline()
print(content, end='') # print默認具有換行能力,可以設置end=''取消換行
content = f.readline()
print(content, end='')
content = f.readline()
print(content, end='')
# readlines() 讀取所有的行,每行內容作爲一個元素保存在列表中
with open('456.txt') as f:
list_temp = f.readlines()
for line in list_temp:
print(line.strip()) # 把末尾的'\n'刪掉
print(list_temp) # ['dddd\n', 'ddddddddddddd\n', 'ddddddddddddddddd\n', 'dddddddddd']
# 456.txt內容:
# dddd
# ddddddddddddd
# ddddddddddddddddd
# dddddddddd
# 一般的讀取方案
with open('456.txt') as f:
while True:
content = f.readline() # ★主要使用這個方法,有效的避免出現內存峯值
print(content, end='')
if len(content) == 0: # 也可以是: content == ''
break
'''
♥ w :
1> 只能寫;
2> 文件不存在新建;
3> 存在會清空原內容,然後寫入新內容;
4> 同一個文件對象多次寫入時追加寫入,不會覆蓋;
5> 此方法寫入的同時,還會返回此次寫入的字符數;
'''
with open('123.txt', 'w') as f:
n1 = f.write('cads')
n2 = f.write('Oriya')
print(n1, n2)
'''
♥ a :
只能寫;
文件不存在新建;
存在會追加內容;
'''
'''
♥ r+ 讀寫模式:
1> 能寫,打開不存在的文件會報錯
2> 存在會覆蓋原內容,新寫入多少字符,就會覆蓋多少原文本多少字符,指針就停留在新寫入內容後,此時讀取會把指針後的內容讀出來顯示
3> 在同一個文件對象多次寫入時不會覆蓋寫,會追加寫入;
4> 此方法寫入的同時,還會返回此次寫入的字符數;
'''
# 原內容: 原內容在python解釋器看來是這樣的: 123456\n678\n789
# 123456
# 678
# 789
# 新內容
# 123456
# 678
# 78900
f = open('1.txt', 'r+')
f.write('000\n')
content = f.read()
print(content, end='') # 新寫入的000\n會覆蓋原文件中的前5個字符,且read後顯示的內容不包含新寫入的內容
'''
♥ w+ :
1> 寫讀
2> ⽂件存在則先清空內容
3> ⽂件不存在,創建新⽂件
'''
str1 = "Hello, everyone. I'm a python programmer "
str2 = "If哈哈ffams"
with open("1.txt", "w+", encoding='utf-8') as file:
file.write(str1)
file.write(str2)
file.seek(0)
content = file.read()
print(content)
'''
♥ a+ :
1> ⽤於讀寫
2> ⽂件存在, 追加內容
3> ⽂件不存在,創建新⽂件
'''
f = open('3.txt', 'a+')
f.seek(0) # seek只對讀有效
res = f.write('sssssss')
f.seek(0)
res1 = f.read()
print(res1, end='')
# 對圖片、音頻等非文本文件 讀寫 需要使用 rb wb ab
# rb ⼆進制格式的只讀操作。後續⽹絡課程中具體講解。
# wb ⼆進制格式的只寫操作。後續⽹絡課程中具體講解。
# ab ⼆進制格式的追加操作。後續⽹絡課程中具體講解。
# 方式一:
# 1、打開 打開文件 open(文件路徑,訪問模式)
# 2、讀寫數據 寫入數據時,必須是字符串
# 3、關閉 關閉文件,如果不關閉。文件會始終保留在內存中,無法讓內存及時回收(內存泄漏)
f = open('C:/Users/32022/Desktop/ww.docx', 'w', encoding='utf-8')
f.write('Oriya')
f.close()
# 方式二:自動關閉文件
# 優點:當執行完操作縮進內容時,會自動使用f來進行我呢見關閉操作
with open('123.txt', 'r', encoding='utf8') as f:
print(f.read())
"""
\x:稱爲轉義字符 不會像普通字符輸出,而是有特殊含義
\t 輔助對齊
\n 換行
r"xx" 字符串前加r,表示將字符串中的所有內容都當作普通字符處理
Windows 路徑分隔符支持 / \
Linux/macos 只支持 /
建議使用 / 全系統兼容
編碼:人文語言 ——> 機器語言
解碼:機器語言 ——> 人文語言 編碼解碼不一致會亂碼
Windows中文版 文件讀寫時,默認使用gbk進行編碼
函數:print(self, *args, sep=' ', end='\n', file=None)
print默認具有換行能力,可以設置end=''取消換行
"""
輸⼊⽂件的名字,然後程序⾃動完成對⽂件進⾏備份
# 需求:輸⼊⽂件的名字,然後程序⾃動完成對⽂件進⾏備份
def copy():
in_str = input('請輸⼊拷⻉⽂件名:')
with open(in_str) as f:
content = f.read()
new_str = in_str.replace('.', '[復件].')
# dot_index = in_str.rfind('.')
# new_str = in_str[:dot_index] + '[復件]' + in_str[dot_index:]
with open(new_str, 'w') as f:
f.write(content)
copy()
批量修改文件名
import os
def p():
path = input('輸⼊需要批量修改⽂件名的⽂件夾名稱:')
os.chdir(path)
list_data = os.listdir()
print(os.getcwd())
print(list_data)
for list_f in list_data:
print(list_f)
os.rename(list_f, '[復件]' + list_f)
p()