Python知識點12---Python的I/O操作

提前說一點:如果你是專注于Python開發,那么本系列知識點只是帶你入個門再詳細的開發點就要去看其他資料了,而如果你和作者一樣只是操作其他技術的Python API那就足夠了。

Python的流(I/O)操作,最簡單的其實就是輸入和輸出,輸出我們都知道使用輸出函數

print( str , end = '\n')

但是Python的輸入卻有兩個方法,一個是我們最常用的 input,但是其實Python還有一個raw_input函數也可以輸入,那么它們的區別在哪里呢?

raw_input([prompt]) 	從標準輸入讀取一個行,就是鍵盤輸入的數據,并返回一個字符串(去掉結尾的換行符),prompt 是提示語句例如:str = raw_input("請輸入:")print "你輸入的內容是: ", str
結果:請輸入:Hello Python!你輸入的內容是:  Hello Python!

但是input,這個函數除了支持raw_input同樣的功能之外,它還有一個特別的特點,它可以識別輸入數據中的Python代碼

str = input("請輸入:")
print "你輸入的內容是: ", str例如:輸入:[x*5 for x in range(2,10,2)]
結果:你輸入的內容是:  [10, 20, 30, 40]

再向深層次學習流操作,那就要說說Python和其他語言一樣都有的操作文件API,且Python的文件API更加簡潔
open(name,mode,buffering)		name是文件路徑,mode是訪問模式,該方法會返回一個文件對象,buffering是一個寄存區,也就是字符緩沖區的標識,如果 buffering 的值被設為 0,文件就不會被緩存。如果 buffering 的值取 1,訪問文件時會寄存行。如果將 buffering 的值設為大于 1 的整數,表明了這就是的寄存區的緩沖大小。如果取負值,寄存區的緩沖大小則為系統默認

mode模式支持如下的參數,常用的也就讀寫而已
在這里插入圖片描述
在這里插入圖片描述
在菜鳥教程里面羅列了常用的幾個模式,并且使用圖例的方式進行直白的解釋
在這里插入圖片描述
以及提供了下面這個表格,解釋了常用的幾個模式,可以實現哪些功能
在這里插入圖片描述
同時你可以知道根據open方法返回的對象,獲得如下信息
在這里插入圖片描述

fo = open("foo.txt", "w")
print "文件名: ", fo.name
print "是否已關閉 : ", fo.closed
print "訪問模式 : ", fo.mode
print "末尾是否強制加空格 : ", fo.softspace

在打開一個文件,并使用結束后,一定要記住關閉它,不然你的內存會被大量占用

文件對象.close()

在調用了關閉流的方法后,Python會刷新緩存區里面的內容到文件中,之后就不能再操作寫入了


Pythond的文件對象還提供了,許多其他方法用來操作文件,比如寫方法

文件對象.write(str)	

操作寫入方法的時候,要注意,流中的 str 不一定必須是字符串,可以是二進制數據,且該方法不會自動增加換行符號

# 打開一個文件
fo = open("foo.txt", "w")
fo.write( "www.runoob.com!\nVery good site!\n")# 關閉打開的文件
fo.close()在文件中會有如下內容:
www.runoob.com!
Very good site!

文件對象還提供了,讀取內容的方法,read()

文件對象.read(num)	讀取文件,num是字節個數,不寫時讀取所有內容# 打開一個文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print "讀取的字符串是 : ", str
# 關閉打開的文件
fo.close()讀取的字符串是 :  www.runoob

當然還有readline方法可以讀取一行,在你要讀取的文件很大的時候,就不在適合使用read了,且readline返回的字符串中包含換行符

file = open('foo.txt', 'r' )while True:text_line = file.readline()if text_line:print(text_line)else:break

readline函數還可以傳入一個參數,和read的num一樣意義的參數,控制讀取的字節大小,不過一般不用,畢竟只讀取一行數據

當然Python還有一個readlines函數,它的使用有些風險,因為它讀取的也是整個文件,不過他的返回結果是一個列表,把每一行數據包含換行符作為列表的每一個元素

文件內容:
1:www.runoob.com
2:www.runoob.com
3:www.runoob.com
4:www.runoob.com
5:www.runoob.comfo = open("runoob.txt", "r")
print "文件名為: ", fo.namefor line in fo.readlines():                          #依次讀取每行  line = line.strip()                             #去掉每行頭尾空白  print "讀取的數據為: %s" % (line)# 關閉文件
fo.close()

說了讀取方法就不得不說,文件定位了,也就是光標讀取文件時的位置

tell()方法告訴你文件內的當前位置, 換句話說,下一次的讀寫會發生在文件開頭這么多字節之后。

seek(offset [,from])方法改變當前文件的位置。offset變量表示要移動的字節數。From變量指定開始移動字節的參考位置。如果from被設為0,這意味著將文件的開頭作為移動字節的參考位置。如果設為1,則使用當前的位置作為參考位置。如果它被設為2,那么該文件的末尾將作為參考位置。

# 打開一個文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print "讀取的字符串是 : ", str# 查找當前位置
position = fo.tell()
print "當前文件位置 : ", position# 把指針再次重新定位到文件開頭
position = fo.seek(0, 0)
str = fo.read(10)
print "重新讀取字符串 : ", str
# 關閉打開的文件
fo.close()結果:
讀取的字符串是 :  www.runoob
當前文件位置 :  10
重新讀取字符串 :  www.runoob

文件除了讀寫,最基本的還有重命名與刪除

import os , shutil
os.rename(current_file_name, new_file_name)		重命名方法的兩個參數,分別是帶文件名的新舊路徑os.remove(file_name)		刪除一個文件shutil.move()	移動文件

當然 我們導入的 os 模塊還有著相當多實用的方法

os.mkdir(newdir)		建立一個新的目錄,注意該方法只能新建目錄,想新建文件可以考慮open方法os.chdir(newdir)		這個方法用來設置當前程序操作的當前路徑,用的比較少os.getcwd()		該方法用來顯示當前路徑,對于Python程序來說叫做當前工作目錄os.rmdir(dirname)		該方法用來刪除一個目錄,但是注意刪除一個目錄前,它的子數據應該是被刪除的os.listdir(目錄)		獲取目錄下的所有文件名shutil模塊:是python內置的高級的文件、文件夾、壓縮包處理模塊shutil.copyfile(src,dst) 
將src復制到dst中去,dst一定要具有讀寫權限,如果dst已經存在會被覆蓋,src和dst必須是文件,不可以是目錄。shutil.move(src,dst)
移動文件、目錄。或者文件、目錄重命名,如果dst存在,則不可覆蓋。shutil.copt(src,dst)
復制一個文件到一個文件或一個目錄,src必須是文件,dst是文件或者目錄shutil.copy2(src,dst)
在copy的基礎上再復制文件最后訪問時間和修改時間也復制過來,但是創建時間是不會和源文件一樣的。shutil.copytree(olddir,newdir,True/False)
把olddir拷貝一份newdir,如果第三個參數是True,則復制目錄時將保持文件夾下的符號鏈接,如果地3個參數時False,則將在復制的目錄下生成物理副本來代替符號連接

文件對象和我們上面導入的 os 模塊相互配合可以實現很多操作,用到時具體的大家可以在網上找找,推薦大家可以看看菜鳥教程的, 文件對象API --------- os 對象API

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

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

相關文章

擴展翡蜀定理問題

問題描述 給定一個大小為 n n n 的集合 A { a 1 , a 2 ~ a n } A\{a_1,a_2 \sim a_n\} A{a1?,a2?~an?},滿足條件 gcd ( A ) 1 \text{gcd}(A)1 gcd(A)1。 O ( 1 ) O(1) O(1)時間內 求最大的 k k k ,滿足不存在一個大小為 n n n 的非負數集合…

工廠的精益生產如此重要

什么是工廠的精益生產 精益生產(Lean Manufacturing)是一種起源于20世紀50年代日本豐田汽車公司的生產管理哲學。它的核心理念是通過消除生產過程中的浪費,優化流程,提高效率,從而實現成本降低和質量提升。精益生產不僅…

VRTK4.0學習——(二)

手柄綁定以及顯示 1.導入CameraRigs.UnityXRPluginFramework 和 CameraRigs.TrackedAlias 預設,將CameraRigs.UnityXRPluginFramework拖入CameraRigs.TrackedAlias的Elements中即可,運行軟件后即可看到手柄了 注:如果無法看到手柄&#xff…

MySQL:MySQL執行一條SQL查詢語句的執行過程

當多個客戶端同時連接到MySQL,用SQL語句去增刪改查數據,針對查詢場景,MySQL要保證盡可能快地返回客戶端結果。 了解了這些需求場景,我們可能會對MySQL進行如下設計: 其中,連接器管理客戶端的連接,負責管理連接、認證鑒權等;查詢緩存則是為了加速查詢,命中則直接返回結…

Linux Shell Script 編寫入門

Linux Shell 腳本是一種強大的工具,能夠幫助用戶自動化任務、簡化系統管理以及提高工作效率。本文將帶您全面了解如何編寫 Linux Shell 腳本,并介紹一些常見的腳本編寫技巧和注意事項。 目錄 什么是 Linux ShellShell 腳本的基本結構常用 Shell 命令變…

系統介紹在線直線度測量儀的測量原理

測頭的測量原理 藍鵬光電測頭采用的是CCD成像法測量,CCD成像法是指將被測物放置在物方遠心光路系統中進行成像,并利用成像位置的CCD芯片接收成像信息進行尺寸測量的方法。該測量方法的優點主要有兩個:一是成像邊界清晰,光電信號可…

從墻的功能出發 -分析歐特克Revit和廣聯達數維的差別

歐特克(Autodesk)在三維建模軟件領域的影響力是有目共睹的,它是行業的頭部產商,擁有眾多的高質量的三維設計軟件,涵蓋了建筑設計、機械設計與制造和電影文娛行業。Revit是其發布的建筑三維建模軟件,也是BIM…

如何用個人電腦搭建一臺本地服務器,并部署項目到服務器詳細教程(Ubuntu鏡像)

前言 VirtualBox虛擬機軟件是一款強大、免費且開源的虛擬化工具,它允許用戶在單一物理機器上同時運行多個操作系統。他對比VMware就是更輕量級的虛擬機軟件,而且操作更簡單。 下載地址:Download_Old_Builds_7_0 – Oracle VM VirtualBox …

SpringMVC日期格式處理 分頁條件查詢

實現日期格式處理 實現分頁條件查詢: 分頁條件查詢 和 查詢所有 是兩個不同的方法,使用同一個mapper的查詢功能,但是兩個不同的業務方法 ???????

24年西藏事業單位報名詳細流程

?各位姐妹們注意啦!24西藏事業單位公告已出,本次計劃公開招聘8?9?9?人即日起開始報名,想要上岸的姐妹們要抓緊了哦?趁著還有時間趕緊開卷!!! 🌈24西藏事業單位招聘考試: &…

k8s練習--StorageClass詳細解釋與應用

文章目錄 前言StorageClass是什么 一、實驗目的配置過程 二、實驗環境實驗步驟一、配置網絡存儲NFS:1.主機基礎配置2.配置 NFS: 二、開啟rbac權限:三、創建nfs-deployment.yaml四、創建storageclass資源五、驗證:1.創建PVC驗證2.創建一個pod驗…

C++青少年簡明教程:數組

C青少年簡明教程:數組 C數組是一種存儲固定大小連續元素的數據結構。數組中的每個元素都有一個索引,通過索引可以訪問或修改數組中的元素。 在C中,數組中的元素數據類型必須一致。數組是一個連續的內存區域,用于存儲相同類型的元…

期權懂帶你懂50etf認沽期權和認購期權有什么區別?

今天帶你了解期權懂帶你懂50etf認沽期權和認購期權有什么區別?在金融市場中,期權是一種允許持有者在未來某個時間以特定價格買入或賣出基礎資產的金融衍生品。 50etf認沽期權和認購期權有什么區別? 50ETF認沽期權和認購期權的主要區別在于它…

算法題day39(補5.25日卡:貪心算法day6)

一、刷題 1.leetcode題目 738. 單調遞增的數字 - 力扣(LeetCode)(medium) 解決: class Solution:def monotoneIncreasingDigits(self, n: int) -> int:list_n list(str(n))list_n [int(i) for i in list_n]for…

聚類算法—DBSCAN算法

文章目錄 DBSCAN算法基本概念1個核心思想:基于密度2個算法參數:鄰域半徑R和最少點數目minpoints3種點的類別:核心點,邊界點和噪聲點4種點的關系:密度直達,密度可達,密度相連,非密度相…

3131. 找出與數組相加的整數 I

給你兩個長度相等的數組 nums1 和 nums2。 數組 nums1 中的每個元素都與變量 x 所表示的整數相加。如果 x 為負數,則表現為元素值的減少。 在與 x 相加后,nums1 和 nums2 相等 。當兩個數組中包含相同的整數,并且這些整數出現的頻次相同時&…

Spi Pwm Tim 對比分析

spi SPI時序圖 (spi是主從機 所以主機需要從機數據 需要主極先喊從機 把從機喊答應了 才能開始讀從機的數據) cpol時鐘極性 和cpha時鐘相位分析 1.cpha為高,cpol為高,則偶數上升沿有效 2.cpha為高,cpol為低,則偶數…

JVM之【GC-垃圾清除算法】

Java虛擬機(JVM)中的垃圾收集算法主要分為以下幾種: 標記-清除算法(Mark-Sweep)復制算法(Copying)標記-整理算法(Mark-Compact)分代收集算法(Generational C…

vue3+three.js給glb模型設置視頻貼圖

1.在網上下載一個顯示屏或者自己畫一個,在blender中設置好顯示屏的Mesh,UV設置好,這樣方便代碼中添加紋理貼圖。可以讓美術在建模軟件中,先隨機設置一張圖片作為紋理,驗證UV是否設置好 關于如何 在blender中給模型設置UV貼圖百度很多的 // 視頻 import * as THREE from…

MacOS13-將數據庫轉為markdown,docx格式

MacOS13-將數據庫轉為markdown,docx格式 文章目錄 先說踩坑點各種模塊缺失 代碼效果總結參考 先說踩坑點 各種模塊缺失 tkinter mysql 沒錯,你可以直接點擊安裝; 如果還出現報錯 你需要打開終端 pip install mysqlclient再次點進去安…