Python的文件讀寫


import time

def main():
    fs = open('hello.txt', 'r', encoding='utf-8')  # 把‘r’換成‘w’就是寫文件
    # 表示打開當前路徑下文件‘hello.txt’
    # content = fs.read()
    # print(content)

    # for line in fs:  # 一次讀一行
    #    print(line, end = '')
    #    time.sleep(0.5)
    mylist = fs.readlines()
    print(mylist)
    fs.close()

    # 寫文件
    # fs.write('彈木吉他抒情一些\n')
    # fs.write('可回憶騷動一整夜\n')
    # fs.write('寒冷卻下不了雪\n')

    # 用with讀取文件,如果在with下出現錯誤導致程序崩潰,就會退出,不會影響其他位置的程序
    # 輸入文件路徑也可以,.表示當前路徑,..表示上一級路徑
    with open('./abc/hello.txt', 'r', encoding='utf-8') as fs: 
        mylist = fs.readlines
        for line in mylist:
            print(line, end='')
            time.sleep(1)


if __name__ == '__main__':
    main()

​異常機制 - 處理程序在運行過程中出現的意外狀況的手段

因爲不是所有的問題都能夠在寫程序調試程序的時候就能發現


import time

def main():
    try:  # 把要讀取的文件放到try裏面保護起來,讓文件即使讀取出現錯誤也能夠繼續執行後面的代碼
        with open('./abc/hello.txt', 'r', encoding='utf-8') as fs: 
            mylist = fs.readlines()
            for line in mylist:
                print(line, end='')
                time.sleep(1)
    except FileNotFoundError:  # 捕獲文件異常
        print('指定的文件無法打開.')  
    # except IOError:
    #     pring('讀寫文件時出現錯誤.')

    # except FileNotFoundError as e:
    #    print(e)             打印出現錯誤的文件
    #    print('指定的文件無法打開')
    print('程序執行結束.')


if __name__ == '__main__':
    main()

​​

把1-100,101-1000,1001-10000的素數分別放入三個文件夾

from math import sqrt

def is_prime(n):
    assert n > 0  # 檢查n是否是有效數,無效則程序報異常不執行
    for factor in range(2, int(sqrt(n)) + 1):
        if n % factor == 0:
            return False
    return True if n != 1 else False

def main():
    filenames = ('a.txt', 'b.txt', 'c.txt')
    fs_list = []
    try:  # 我們也可以把可能出狀況(在執行時有風險)的代碼放到try代碼塊來執行
        for filename in filenames:
            fs_list.append(open(filename, 'w', encoding='utf-8'))
        for number in range(1, 10000):
            if is_prime(number):
                if number < 100:
                    fs_list[0].write(str(number) + '\n')
                elif number < 1000:
                    fs_list[1].write(str(number) + '\n')
                else:
                    fs_list[2].write(str(number) + '\n')

    except IOError:  # 如果try中出現了狀況就通過except來捕獲錯誤(異常)進行對應的處理
        print('讀寫文件發生錯誤')
    except FileNotFoundError:  # except可以寫多個分別用於處理不同的異常狀況
        pass
    # except BaseException:  處理所有的異常狀況
    #     pass

    # else:  如果沒有出狀況,那麼可以把無風險的代碼放到else中執行
    #     for number in range(1, 10000):
    #         if is_prime(number):
    #             if number < 100:
    #                fs_list[0].write(str(number) + '\n')
    #            elif number < 1000:
    #                 fs_list[1].write(str(number) + '\n')
    #             else:
    #                 fs_list[2].write(str(number) + '\n')
    finally:
        # 釋放文件資源,不管程序正常還是異常,最後這裏的代碼一定會執行,保證資源釋放
        # 所以此處是最好的釋放外部資源的位置,因爲這裏的代碼總是會執行
        for fs in fs_list:
            fs.close
    print('操作完成!')


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