pythonⅡ——文件操作

目錄

 

文件常見操作

文件讀寫

輸⼊⽂件的名字,然後程序⾃動完成對⽂件進⾏備份

批量修改文件名


文件常見操作

"""
文件常見操作都包含在模塊中
    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()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章