5.1 Python3 進階 - 檔案操作
阿新 • • 發佈:2021-09-07
>>返回主目錄
原始碼
# 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])諮詢。