1. 程式人生 > 其它 >python讀、寫、追加

python讀、寫、追加

讀寫模式之a模式

# a模式  只追加模式
# 路徑不存在:自動建立
with open(r'a.txt','a',encoding='utf8') as f:
    pass
# 路徑存在:不會清空檔案 在檔案末尾新增內容
with open(r'a.txt', 'a', encoding='utf8') as f:
    f.write('\n今天週四了 馬上又要放假了 好開心!')
    
 
"""小總結
	我們所學習的r w a讀寫模式都只能操作文字檔案
"""

檔案操作方法

# 檔案操作方法
# 1.讀系列
with open(r'a.txt', 'r', encoding='utf8') as f:
    # print(f.read())  # 一次性讀取檔案內所有的內容
    # print(f.readline())  # 每次只讀檔案一行內容
    # print(f.readlines())  # 讀取檔案所有的內容 組織成列表 每個元素是檔案的每行內容
    # print(f.readable())  # 判斷當前檔案是否具備讀的能力


# 2.寫系列
with open(r'a.txt','w',encoding='utf8') as f:
    # f.write('克服一切困難 奧利給!')  # 往檔案內寫入文字內容
    # f.write(123)  # 寫入的內容必須是字串型別
    # f.writelines(['jason','kevin','tony'])  # 可以將列表中多個字串元素全部寫入
    # print(f.writable())  # True
    # print(f.readable())  # False
    f.flush()  # 直接將記憶體內檔案資料刷到硬碟 相當於ctrl+s

檔案優化操作

with open(r'a.txt', 'r', encoding='utf8') as f:
    # print(f.read())  # 一次性讀取檔案內所有的內容
    # print(f.read())  # 一次性讀取檔案內所有的內容
    # print(f.read())  # 一次性讀取檔案內所有的內容
    """
    1.一次性讀完之後 游標停留在了檔案末尾 無法再次讀取內容
    2.該方法在讀取大檔案的時候 可能會造成記憶體溢位的情況
        解決上述問題的策略就是逐行讀取檔案內容
    """
    # for line in f:  # 檔案變數名f支援for迴圈  相當於一行行讀取檔案內容
    #     line
    '''以後涉及到多行檔案內容的情況一般都是採用for迴圈讀取'''

課堂練習

1.簡易版本的註冊、登陸功能
	普通要求(實現一次即可)
    	註冊功能
        	獲取使用者名稱和密碼組織成你喜歡的樣子寫入檔案即可
        登陸功能
        	獲取使用者名稱和密碼然後比對是否與檔案內使用者資料一致
 
# 註冊功能
    # 1.獲取使用者使用者名稱和密碼
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
    # 2.將使用者名稱和密碼組織成一個字串
    data = '%s|%s' % (username, password)
    # 3.檔案操作 寫入資料
    with open(r'userinfo.txt', 'w', encoding='utf8') as f:
        f.write(data)
    print('使用者:%s 註冊成功' % username)
 
# 登入功能
    # 1.獲取使用者名稱和密碼(先使用input獲取使用者輸入的資料 然後strip()移除首尾空格 之後賦值給變數名username)
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
    # 2.獲取檔案內真實的使用者資料
    with open(r'userinfo.txt','r',encoding='utf8') as f:
        # 由於現在檔案中只有一行內容 我們乾脆直接讀取完
        data = f.read()  # 'jason|jason123'
        '''with子程式碼執行完之後的結果是可以在外面使用的'''
    # 3.切割字串獲取真實的使用者名稱和密碼
    res = data.split('|')  # ['jason', 'jason123']
    '''這裡也可以直接使用解壓賦值的操作  real_name,real_pwd = data.split('|')'''
    # 4.比對資料
    if username == res[0] and password == res[1]:
        print('登入成功')
    else:
        print('使用者名稱或密碼錯誤')

進階練習

# 多使用者註冊
# while True:
#     # 1.獲取使用者使用者名稱和密碼
#     username = input('username>>>:').strip()
#     password = input('password>>>:').strip()
#     # 2.將使用者名稱和密碼組織成一個字串
#     data = '%s|%s\n' % (username, password)
#     # 2.1.判斷使用者名稱是否已存在
#     with open(r'userinfo.txt', 'r', encoding='utf8') as f1:
#         # 2.2.迴圈讀取每一行使用者資料
#         for line in f1:
#             # 2.3.獲取每一行資料中的使用者名稱
#             real_name, real_pwd = line.split('|')
#             # 2.4.判斷使用者名稱是否一致
#             if username == real_name:
#                 print('使用者名稱已存在')
#                 break
#         else:
#             # 3.檔案操作 寫入資料
#             with open(r'userinfo.txt', 'a', encoding='utf8') as f:
#                 f.write(data)
#             print('使用者:%s 註冊成功' % username)


# 多使用者登入
# 1.獲取使用者名稱和密碼(先使用input獲取使用者輸入的資料 然後strip()移除首尾空格 之後賦值給變數名username)
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 2.獲取檔案內真實的使用者資料
with open(r'userinfo.txt', 'r', encoding='utf8') as f:
    for line in f:
        # 3.切割字串獲取真實的使用者名稱和密碼
        '''注意密碼末尾有\n'''
        real_name, real_pwd = line.split('|')  # ['jason', 'jason123\n']
        # 4.比對使用者名稱和密碼是否正確
        if username == real_name and password == real_pwd.strip('\n'):
            print('登入成功')
            break
    else:
        print('使用者名稱或密碼錯誤')

程式碼整合

while True:
    print("""
    1.使用者註冊
    2.使用者登入
    """)
    choice = input('請輸入您想要執行的功能編號>>>:').strip()
    if choice == '1':
        # 1.獲取使用者使用者名稱和密碼
        username = input('username>>>:').strip()
        password = input('password>>>:').strip()
        # 2.將使用者名稱和密碼組織成一個字串
        data = '%s|%s\n' % (username, password)
        # 2.1.判斷使用者名稱是否已存在
        with open(r'userinfo.txt', 'r', encoding='utf8') as f1:
            # 2.2.迴圈讀取每一行使用者資料
            for line in f1:
                # 2.3.獲取每一行資料中的使用者名稱
                real_name, real_pwd = line.split('|')
                # 2.4.判斷使用者名稱是否一致
                if username == real_name:
                    print('使用者名稱已存在')
                    break
            else:
                # 3.檔案操作 寫入資料
                with open(r'userinfo.txt', 'a', encoding='utf8') as f:
                    f.write(data)
                print('使用者:%s 註冊成功' % username)
    elif choice == '2':
        # 1.獲取使用者名稱和密碼(先使用input獲取使用者輸入的資料 然後strip()移除首尾空格 之後賦值給變數名username)
        username = input('username>>>:').strip()
        password = input('password>>>:').strip()
        # 2.獲取檔案內真實的使用者資料
        with open(r'userinfo.txt', 'r', encoding='utf8') as f:
            for line in f:
                # 3.切割字串獲取真實的使用者名稱和密碼
                '''注意密碼末尾有\n'''
                real_name, real_pwd = line.split('|')  # ['jason', 'jason123\n']
                # 4.比對使用者名稱和密碼是否正確
                if username == real_name and password == real_pwd.strip('\n'):
                    print('登入成功')
                    break
            else:
                print('使用者名稱或密碼錯誤')
    else:
        print('沒有改功能 愛咋滴咋滴!')

檔案操作模式

t	文字模式
	1.預設的模式
    	r w a  >>> rt wt at
    2.該模式所有操作都是以字串基本單位(文字)
    3.該模式必須要指定encoding引數
    4.該模式只能操作文字檔案
    
b   二進位制模式
	1.該模式可以操作任意型別的檔案
    2.該模式所有操作都是以bytes型別(二進位制)基本單位
    3.該模式不需要指定encoding引數
    	rb wb ab