1. 程式人生 > 其它 >5.1 Python3 進階 - 檔案操作

5.1 Python3 進階 - 檔案操作

>>返回主目錄




原始碼

# open() 函式
# 開啟檔案方式一
fp = open('demo/open_mode', 'r', encoding='utf-8')
print('檢視返回物件:', fp)
print('檔案是否關閉:', fp.closed)
print('檔案的訪問模式:', fp.mode)
print('檔名稱:', fp.name)

# close()方法:關閉一個已開啟的檔案,例如:
fp.close()
print('再次檢視檔案是否關閉:', fp.closed)

# 開啟檔案方式二:上下文管理機制,with語法
with open('demo/open_mode', 'r', encoding='utf-8') as fp:  # 必須是個可迭代物件,支援上下文
    print('檔案是否關閉:', fp.closed)
print('再次檢視檔案是否關閉:', fp.closed)

# with支援同時對多個檔案的上下文進行管理
with open('demo/open_mode') as fp1, open('demo/file_object_function.txt') as fp2:
    print('同時開啟兩個檔案::', fp1, fp2)

原始碼

from typing import Iterator

# close()方法
fp = open('demo/open_mode', 'r', encoding='utf-8')
fp.close()
fp.close()
print('屬性仍然可以被訪問:', fp.name)

# next()方法
with open('demo/file_object_function.txt', 'r', encoding='utf-8') as fp:
    print(next(fp))
    print(fp.__next__())
    print(next(fp))
    print('判斷fp物件是否是迭代器:', isinstance(fp, Iterator))

原始碼

# read()方法
with open('demo/file_object_function.txt', 'r', encoding='utf-8') as fp:
    # print('讀取12位元組數字符:', fp.read(12))
    print('讀取所有位元組數:', fp.read())

# readline()方法
with open('demo/file_object_function.txt', 'r', encoding='utf-8') as fp:
    # print('讀取50位元組數字符:', fp.readline(50))
    print('讀取整行所有位元組數:', fp.readline())

原始碼

# readlines()方法
with open('demo/file_object_function.txt', 'r', encoding='utf-8') as fp:
    # print('讀取30位元組數字符:', fp.readlines(30))
    print('讀取整行所有位元組數:', fp.readlines())

# 可通過for迴圈進行迭代
with open('demo/file_object_function.txt', 'r', encoding='utf-8') as fp:
    for n, line in enumerate(fp.readlines()):
        print(f'第{n}行是:', line)


原始碼

# write()方法:檔案開啟模式:r+(讀寫,檔案指標將會放在檔案的開頭)
with open('demo/write_mode_r+', 'r+', encoding='utf-8') as fp:
    # print(fp.read())  # 先讀後寫
    print('返回值是:', fp.write('5test write\n'))
    fp.write('6test write\n')
    # print(fp.read())  # 先寫後讀


# 檔案開啟模式:w+(讀寫)
with open('demo/write_mode_w+', 'w+', encoding='utf-8') as fp:
    # print(fp.read())  # 先讀後寫
    fp.write('5test write\n')
    fp.write('6test write\n')
    print(fp.read())  # 先寫後讀

# 檔案開啟模式:w(只寫)
with open('demo/write_mode_w-', 'w') as fp:
    # print(fp.read())  # 先讀後寫,讀檔案報錯
    fp.write('1test write\n')

原始碼

# 文writelines()方法:件開啟模式:w(只寫)
with open('demo/write_mode_w', 'w') as fp:
    seq1 = ['We', 'are', 'learning', 'writelines', 'function!']
    seq2 = ['\nI', '\nam', '\nfighting!']
    fp.writelines(seq1)
    fp.writelines(seq2)

# 檔案開啟模式:a+(讀寫,檔案指標會放在檔案的末尾)
with open('demo/write_mode_a+', 'a+') as fp:
    seq = ['We', 'are', 'learning', 'writelines', 'function!\n']
    fp.writelines(seq)

原始碼

"""
.env檔案內容如下
# test1

 key1=value1

key2 = value2=
key3 = 'value3='

key4 ="val/ue4="

# test2
  key5 =
key6 = ''
{'key7': 'key7'}
{'key7': 'key7', 'key8': 'key8', 'key9': 'key9'}
key7=key7
key8=key8
key9=key9
"""

# Author:PortosHan
# Datetime:2021/8/24 18:24
# Project:zbcf_python_test_project
"""
功能
1、讀取配置檔案資訊;
2、根據配置檔案中key鍵獲取value值;
3、新增配置資訊:key=value;
"""
from functools import partial


def get_env_info(path):
    """
    :function: 讀取env檔案內容
    :param path: 傳入檔案路徑名稱
    :return: 
    """
    with open(path) as fp:
        print(fp.read())


def get_env_value(path, key=None):
    """
    :function: 根據key獲取value值
    :param path: 傳入檔案路徑名稱
    :param key: 傳入key鍵
    :return: 返回value值
    """
    value = None
    if key:
        file_key_value = {}
        with open(path) as fp:
            lines = fp.readlines()
            strip_lines = list(map(lambda x: x.replace('\n', ''), lines))
            for line in strip_lines:
                if not line.strip().startswith('#') and '=' in line:
                    line_key, line_value = line.split('=', 1)
                    line_key = line_key.strip()
                    line_value = line_value.strip().strip("\"'")
                    file_key_value[line_key] = line_value
        # print(file_key_value)
        value = file_key_value[key]
        print(f'{key}的值是:{value}')
    return value


def set_key_value(path, **kwargs):
    """
    :function: 向.env檔案中新增key=value形式的資料(預設是追加)
    :param path: 傳入檔案路徑名稱
    :param kwargs: 可傳入字典型別的值
    :return: 
    """
    for key, value in kwargs.items():
        key_value = key + '=' + value
        with open(path, 'a') as fp:
            fp.write('\n' + key_value)


if __name__ == '__main__':
    # .env配置檔案地址(相對路徑)
    env_path = 'exercise_1/.env'
    # 1、讀取配置檔案資訊;
    get_env_info(env_path)
    # 2、根據配置檔案中key鍵獲取value值;
    get_env_value(env_path, 'key4')
    # 利用偏函式,固定env_path的值
    get_partial_env_value = partial(get_env_value, env_path)
    get_partial_env_value('key4')
    # 3、新增配置資訊:key=value;
    set_key_value(env_path, key7='key7', **{'key8': 'key8', 'key9': 'key9'})

>>返回主目錄

作者: PortosHan

出處: https://www.cnblogs.com/PortosHan/

關於作者:專注於軟體測試、測試開發等領域,請多多賜教!

本文版權歸作者和部落格園共有,歡迎轉載,但必須給出原文連結,並保留此段宣告,否則保留追究法律責任的權利。 原文連結 如有問題,可郵件([email protected])諮詢。