Python入門(8):文件

1. 文件基本概念

文件:存儲在計算機上的數據集合,Python 通過文件對象來操作文件。

文件類型

  • 文本文件:由字符組成,如 .txt, .py

  • 二進制文件:由字節組成,如 .jpg, .mp3

2. 文件打開與關閉

2.1 open() 函數

# 打開文件的基本語法
file = open('example.txt', 'r')  # 'r'表示讀取模式
file.close()  # 關閉文件

2.2 文件打開模式

模式描述
'r'只讀(默認)
'w'寫入(會覆蓋)
'a'追加
'x'創建新文件
'b'二進制模式
't'文本模式(默認)
'+'讀寫模式
# 使用 with 語句自動管理文件(推薦)
with open('example.txt', 'r') as file:content = file.read()  # 讀取文件內容
# 離開 with 塊后文件自動關閉

3. 文件讀取方法

3.1 讀取整個文件

with open('example.txt', 'r') as file:content = file.read()  # 讀取全部內容為字符串print(content)

3.2 逐行讀取

# 方法1:使用 readline()
with open('example.txt', 'r') as file:line = file.readline()  # 讀取一行while line:print(line.strip())  # strip() 去除換行符line = file.readline()# 方法2:使用 readlines()
with open('example.txt', 'r') as file:lines = file.readlines()  # 讀取所有行到列表for line in lines:print(line.strip())# 方法3:直接迭代文件對象(推薦)
with open('example.txt', 'r') as file:for line in file:  # 逐行迭代print(line.strip())

4. 文件寫入方法

4.1 寫入字符串

# 寫入模式(會覆蓋原文件)
with open('output.txt', 'w') as file:file.write("Hello, World!\n")  # 寫入字符串file.write("This is a new line.\n")# 追加模式
with open('output.txt', 'a') as file:file.write("This line will be appended.\n")

4.2 寫入多行

lines = ["First line\n", "Second line\n", "Third line\n"]
with open('output.txt', 'w') as file:file.writelines(lines)  # 寫入多行

5. 文件位置操作

with open('example.txt', 'rb') as file:  # 二進制模式才能使用 seek()print(file.tell())  # 獲取當前文件位置(字節偏移量)content = file.read(10)  # 讀取10個字節print(content)file.seek(5)  # 移動到第5個字節print(file.read(5))  # 讀取接下來的5個字節

6. 二進制文件操作

# 讀取二進制文件
with open('image.jpg', 'rb') as file:data = file.read()  # 讀取二進制數據# 寫入二進制文件
with open('copy.jpg', 'wb') as file:file.write(data)  # 寫入二進制數據

7. 文件與目錄操作(os 模塊)

import os# 檢查文件/目錄是否存在
print(os.path.exists('example.txt'))  # True/False# 獲取文件大小
print(os.path.getsize('example.txt'))  # 字節數# 重命名文件
os.rename('old.txt', 'new.txt')# 刪除文件
os.remove('file_to_delete.txt')# 目錄操作
os.mkdir('new_dir')  # 創建目錄
os.rmdir('empty_dir')  # 刪除空目錄

8. 文件路徑操作(os.path 模塊)

import os.path# 獲取絕對路徑
print(os.path.abspath('example.txt'))# 檢查是否為文件/目錄
print(os.path.isfile('example.txt'))  # True
print(os.path.isdir('example.txt'))  # False# 路徑拼接
print(os.path.join('folder', 'subfolder', 'file.txt'))# 獲取文件名和擴展名
print(os.path.basename('/path/to/file.txt'))  # 'file.txt'
print(os.path.splitext('file.txt'))  # ('file', '.txt')

9. 臨時文件(tempfile 模塊)

import tempfile# 創建臨時文件
with tempfile.NamedTemporaryFile(delete=False) as temp_file:temp_file.write(b"Temporary data")  # 寫入臨時數據temp_path = temp_file.name  # 獲取臨時文件路徑print(f"臨時文件路徑: {temp_path}")# 臨時文件會在關閉后自動刪除(除非設置 delete=False)

10. 文件編碼處理

# 指定編碼方式(推薦)
with open('example.txt', 'r', encoding='utf-8') as file:content = file.read()# 處理編碼錯誤
try:with open('example.txt', 'r', encoding='utf-8') as file:content = file.read()
except UnicodeDecodeError:print("文件編碼不匹配!")# 寫入時指定編碼
with open('output.txt', 'w', encoding='utf-8') as file:file.write("包含中文的內容")

11. CSV 文件處理

import csv# 讀取CSV文件
with open('data.csv', 'r', encoding='utf-8') as file:reader = csv.reader(file)for row in reader:print(row)  # 每行是一個列表# 寫入CSV文件
data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]
with open('output.csv', 'w', encoding='utf-8', newline='') as file:writer = csv.writer(file)writer.writerows(data)  # 寫入多行

12. JSON 文件處理

import json# 寫入JSON文件
data = {'name': 'Alice', 'age': 25, 'skills': ['Python', 'Java']}
with open('data.json', 'w', encoding='utf-8') as file:json.dump(data, file, indent=4)  # indent參數美化輸出# 讀取JSON文件
with open('data.json', 'r', encoding='utf-8') as file:loaded_data = json.load(file)print(loaded_data['name'])  # Alice

13. 文件操作最佳實踐

  1. 始終使用?with?語句管理文件資源

  2. 明確指定文件編碼(特別是處理文本時)

  3. 處理大文件時使用迭代方式而非一次性讀取

  4. 檢查文件/目錄是否存在再進行操作

  5. 合理處理文件操作可能引發的異常

  6. 使用?os.path?進行路徑操作而非字符串拼接

  7. 敏感操作前對數據做好備份

14. 常見文件操作異常處理

try:with open('nonexistent.txt', 'r') as file:content = file.read()
except FileNotFoundError:print("文件不存在!")
except PermissionError:print("沒有文件訪問權限!")
except IOError as e:print(f"文件操作錯誤: {e}")
finally:print("操作結束")

如果您覺得本文章對您有幫助,別忘了點贊、收藏加關注,更多干貨內容將持續發布,您的支持就是作者更新最大的動力。本專欄將持續更新,有任何問題都可以在評論區討論

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76538.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76538.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76538.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

市場交易策略優化與波動管理

市場交易策略優化與波動管理 在市場交易中,策略的優化和波動的管理至關重要。市場價格的變化受多種因素影響,交易者需要根據市場環境動態調整策略,以提高交易的穩定性,并有效規避市場風險。 一、市場交易策略的優化方法 趨勢交易策…

HTTP數據傳輸的幾個關鍵字Header

本文著重針對http在傳輸數據時的幾種封裝方式進行描述。 1. Content-Type(描述body內容類型以及字符編碼) HTTP的Content-Type用于定義數據傳輸的媒體類型(MIME類型),主要分為以下幾類: (一)、?基礎文本類型? text/plain? …

面向教育領域的實時更新RAG系統:核心模塊設計與技術選型實踐指南

目錄 面向教育領域的實時更新RAG系統:核心模塊設計與技術選型實踐指南 一、業務需求分析 二、系統架構設計(核心模塊) 三、核心模塊詳解與技術選型建議 (一)實時更新向量知識庫 (二)教材與…

k8s patch方法更新deployment和replace方法更新deployment的區別是什么

在Kubernetes中,patch 和 replace 方法用于更新資源(如 Deployment),但它們的實現方式和適用場景有顯著差異。以下是兩者的核心區別: 1. 更新范圍 replace 方法 完全替換整個資源配置。需要用戶提供完整的資源定義&…

解決安卓手機WebView無法直接預覽PDF的問題(使用PDF.js方案)

在移動端開發中,通過 webview 組件直接加載PDF文件時,不同平臺的表現差異較大: iOS & 部分安卓瀏覽器:可正常內嵌預覽(依賴系統內置PDF渲染能力) 大多數安卓設備:由于缺乏原生PDF插件&…

基于javaweb的SSM+Maven機房管理系統設計與實現(源碼+文檔+部署講解)

技術范圍:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

7-6 混合類型數據格式化輸入

本題要求編寫程序,順序讀入浮點數1、整數、字符、浮點數2,再按照字符、整數、浮點數1、浮點數2的順序輸出。 輸入格式: 輸入在一行中順序給出浮點數1、整數、字符、浮點數2,其間以1個空格分隔。 輸出格式: 在一行中…

【GPIO8個函數解釋】

函數解釋 void GPIO_DeInit(GPIO_TypeDef* GPIOx); 作用:將指定GPIO端口的所有寄存器恢復為默認值。這會清除之前對該端口的所有配置,使其回到初始狀態。使用方法:傳入要復位的GPIO端口指針,例如GPIOA、GPIOB等。 void GPIO_AF…

將圖表和表格導出為PDF的功能

<template><div><divref"pdfContent"style"position: relative; width: 800px; margin: 0 auto"><!-- ECharts 圖表 --><div id"chart" style"width: 100%; height: 400px" /><!-- Element UI 表格 …

C++中的鏈表操作

在C中&#xff0c;鏈表是一種常見的數據結構&#xff0c;它由一系列節點組成&#xff0c;每個節點包含數據部分和指向下一個節點的指針。C標準庫&#xff08;STL&#xff09;中提供了std::list和std::forward_list兩種鏈表實現&#xff0c;分別對應雙向鏈表和單向鏈表。此外&am…

蛋白設計 ProteinMPNN

傳統方法的局限性是什么&#xff1f; 傳統蛋白質設計方法的局限性&#xff1a; 基于物理的傳統方法&#xff0c;例如羅塞塔&#xff0c;面臨計算難度&#xff0c;因為需要計算所有可能結構的能量&#xff0c;包括不需要的寡聚態和聚合態。 設計目標與顯式優化之間缺乏一致性通…

有哪些開源的視頻生成模型

1. 阿里巴巴通義萬相2.1&#xff08;WanX 2.1&#xff09; 技術架構&#xff1a;基于Diffusion Transformer&#xff08;DiT&#xff09;架構&#xff0c;結合自研的高效變分自編碼器&#xff08;VAE&#xff09;和Flow Matching訓練方案&#xff0c;支持時空上下文建模。參數…

【動態規劃】最長上升子序列模板

最長上升子序列 題目傳送門 一、題目描述 給定一個長度為 N 的數列&#xff0c;求數值嚴格單調遞增的子序列的長度最長是多少。 輸入格式 第一行包含整數 N。 第二行包含 N 個整數&#xff0c;表示完整序列。 輸出格式 輸出一個整數&#xff0c;表示最大長度。 數據范圍 …

LeetCode 891 -- 貢獻度思想

題目描述 子序列寬度之和 思路 ref 代碼 相似題 子數組范圍和 acwing

化工行業如何通過定制化工作流自動化實現25-30%成本優化?

作者&#xff1a;Mihir Jhaveri 編譯&#xff1a;李升偉 發布日期&#xff1a;2024年10月30日 在化工生產領域&#xff0c;數字化轉型正以顛覆性態勢重塑產業格局。通過集成定制化軟件、ERP系統、工業物聯網&#xff08;IIoT&#xff09;傳感網絡、機器人流程自動化&#xff0…

Compose組件轉換XML布局

文章目錄 學習JetPack Compose資源前言&#xff1a;預覽界面的實現Compose組件的布局管理一、Row和Colum組件&#xff08;LinearLayout&#xff09;LinearLayout&#xff08;垂直方向 → Column&#xff09;LinearLayout&#xff08;水平方向 → Row&#xff09; 二、相對布局 …

RAG測試數據集資源

一、通用問答基準數據集 HotpotQA 特點:包含11萬+多跳問答對最佳用途:測試復雜推理能力數據示例:{"question": "Were Scott Derrickson and Ed Wood of the same nationality?","answer": "Yes, both are American" }MS MARCO 特點…

快速掌握MCP——Spring AI MCP包教包會

最近幾個月AI的發展非常快&#xff0c;各種大模型、智能體、AI名詞和技術和框架層出不窮&#xff0c;作為一個業余小紅書博主的我最近總刷到MCP這個關鍵字&#xff0c;看著有點高級我也來學習一下。 1.SpringAI與functionCall簡單回顧 前幾個月我曾寫過兩篇關于SpringAI的基礎…

學習筆記--(6)

import numpy as np import matplotlib.pyplot as plt from scipy.special import erfc# 設置參數 rho 0.7798 z0 4.25 # 確保使用大寫 Z0&#xff0c;與定義一致def calculate_tau(z, z_prime, rho, s_values):return np.log(rho * z * z_prime * s_values / 2)# 定義 chi_…

【AI4CODE】5 Trae 錘一個基于百度Amis的Crud應用

【AI4CODE】目錄 【AI4CODE】1 Trae CN 錐安裝配置與遷移 【AI4CODE】2 Trae 錘一個 To-Do-List 【AI4CODE】3 Trae 錘一個貪吃蛇的小游戲 【AI4CODE】4 Trae 錘一個數據搬運工的小應用 1 百度 Amis 簡介 百度 Amis 是一個低代碼前端框架&#xff0c;由百度開源。它通過 J…