python之最強王者(10)———文件(File)、輸入輸出的基本操作

来源:http://www.cnblogs.com/wwyx-xi/archive/2016/09/25/5906443.html
-Advertisement-
Play Games

1. Python 文件I/O 本章只講述所有基本的的I/O函數,更多函數請參考Python標準文檔。 2.列印到屏幕 最簡單的輸出方法是用print語句,你可以給它傳遞零個或多個用逗號隔開的表達式。此函數把你傳遞的表達式轉換成一個字元串表達式,並將結果寫到標準輸出如下: 示例1: 運行示例1結果如 ...


1. Python 文件I/O
  本章只講述所有基本的的I/O函數,更多函數請參考Python標準文檔。

2.列印到屏幕
  最簡單的輸出方法是用print語句,你可以給它傳遞零個或多個用逗號隔開的表達式。此函數把你傳遞的表達式轉換成一個字元串表達式,並將結果寫到標準輸出如下:

示例1:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/25 15:12
# @Author  : wwyx
print "python 是一門面向對象語言"

運行示例1結果如下:

python 是一門面向對象語言

 

3.讀取鍵盤輸入
Python提供了兩個內置函數從標準輸入讀入一行文本,預設的標準輸入是鍵盤。如下:

  • raw_input
  • input

raw_input函數
  raw_input([prompt]) 函數從標準輸入讀取一個行,並返回一個字元串(去掉結尾的換行符):
  示例2:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/25 15:12
# @Author  : wwyx
strs = raw_input("請輸入你想輸入的字元串:")
print "您輸入的字元串是:",strs

示例2 運行結果:

請輸入你想輸入的字元串:python
您輸入的字元串是: python

input函數
  input([prompt]) 函數和 raw_input([prompt]) 函數基本類似,但是 input 可以接收一個Python表達式作為輸入,並將運算結果返回。

示例3:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/25 15:12
# @Author  : wwyx

inputStr = input("可以輸入表達式:")
print "運行輸入的結果:", inputStr

示例3 運行結果:

可以輸入表達式:[x*4 for x in (2,3,4)]
運行輸入的結果: [8, 12, 16]

 

4.打開和關閉文件
  現在,您已經可以向標準輸入和輸出進行讀寫。現在,來看看怎麼讀寫實際的數據文件。
  Python 提供了必要的函數和方法進行預設情況下的文件基本操作。你可以用 file 對象做大部分的文件操作。
open 函數
  你必須先用Python內置的open()函數打開一個文件,創建一個file對象,相關的方法才可以調用它進行讀寫。
語法:

file object = open(file_name [, access_mode][, buffering]

各個參數的細節如下:

  • file_name:file_name變數是一個包含了你要訪問的文件名稱的字元串值。
  • access_mode:access_mode決定了打開文件的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個參數是非強制的,預設文件訪問模式為只讀(r)。
  • buffering:如果buffering的值被設為0,就不會有寄存。如果buffering的值取1,訪問文件時會寄存行。如果將buffering的值設為大於1的整數,表明瞭這就是的寄存區的緩衝大小。如果取負值,寄存區的緩衝大小則為系統預設。

不同模式打開文件的完全列表:
  模式 描述

  1. r 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是預設模式。
  2. rb 以二進位格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是預設模式。
  3. r+ 打開一個文件用於讀寫。文件指針將會放在文件的開頭。
  4. rb+ 以二進位格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。
  5. w 打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
  6. wb 以二進位格式打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
  7. w+ 打開一個文件用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
  8. wb+ 以二進位格式打開一個文件用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
  9. a 打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
  10. ab 以二進位格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
  11. a+ 打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。
  12. ab+ 以二進位格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。

File對象的屬性
  一個文件被打開後,你有一個file對象,你可以得到有關該文件的各種信息。
  以下是和file對象相關的所有屬性的列表:
  屬性 描述

  • file.closed 返回true如果文件已被關閉,否則返回false。
  • file.mode 返回被打開文件的訪問模式。
  • file.name 返迴文件的名稱。
  • file.softspace 如果用print輸出後,必須跟一個空格符,則返回0。否則返回1。

示例4

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/25 15:12
# @Author  : wwyx
filetest = open("file.txt", "wb")

print "文件是否關閉:", filetest.closed
print "文件模式:", filetest.mode
print "文件名稱:", filetest.name
print "是否強制在末尾加空格:", filetest.softspace

示例4 運行結果:

文件是否關閉: False
文件模式: wb
文件名稱: file.txt
是否強制在末尾加空格: 0

close()方法
  File 對象的 close()方法刷新緩衝區里任何還沒寫入的信息,並關閉該文件,這之後便不能再進行寫入。
  當一個文件對象的引用被重新指定給另一個文件時,Python 會關閉之前的文件。用 close()方法關閉文件是一個很好的習慣。
  語法:

fileObject.close();

示例5

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/25 15:12
# @Author  : wwyx
filetest = open("file.txt", "wb")

print "文件是否關閉:", filetest.closed
print "文件模式:", filetest.mode
print "文件名稱:", filetest.name
print "是否強制在末尾加空格:", filetest.softspace
print "關閉文件!"
filetest.close()  # 關閉文件
print "文件關閉成功!"

示例5 結果:

文件是否關閉: False
文件模式: wb
文件名稱: file.txt
是否強制在末尾加空格: 0
關閉文件!
文件關閉成功!

 

5.讀寫文件
  file對象提供了一系列方法,能讓我們的文件訪問更輕鬆。來看看如何使用read()和write()方法來讀取和寫入文件。
  write()方法
  write()方法可將任何字元串寫入一個打開的文件。需要重點註意的是,Python字元串可以是二進位數據,而不是僅僅是文字。
  write()方法不會在字元串的結尾添加換行符('\n'):
  語法:

fileObject.write(string);

在這裡,被傳遞的參數是要寫入到已打開文件的內容。
 示例6

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/25 15:12
# @Author  : wwyx
filetest = open("file.txt", "wb")
filetest.write("python 編程語言可以用到很多地方")
print "關閉文件!"
filetest.close()  # 關閉文件
print "文件關閉成功!"
print "重新打開讀取文件!"
filetest = open("file.txt", "rb")
strs = filetest.read(1024)
print "文件我內容是:",strs

示例6 運行結果:

關閉文件!
文件關閉成功!
重新打開讀取文件!
文件我內容是: python 編程語言可以用到很多地方

    read()方法
  read()方法從一個打開的文件中讀取一個字元串。需要重點註意的是,Python字元串可以是二進位數據,而不是僅僅是文字。
  語法:

fileObject.read([count])

  在這裡,被傳遞的參數是要從已打開文件中讀取的位元組計數。該方法從文件的開頭開始讀入,如果沒有傳入count,它會嘗試儘可能多地讀取更多的內容,很可能是直到文件的末尾。


  用例參考示例6

 

6文件位置

  • tell()方法告訴你文件內的當前位置;換句話說,下一次的讀寫會發生在文件開頭這麼多位元組之後。
  • seek(offset [,from])方法改變當前文件的位置。Offset變數表示要移動的位元組數。From變數指定開始移動位元組的參考位置。
  • 如果from被設為0,這意味著將文件的開頭作為移動位元組的參考位置。如果設為1,則使用當前的位置作為參考位置。如果它被設為2,那麼該文件的末尾將作為參考位置。

示例7:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/25 15:12
# @Author  : wwyx
filetest = open("file.txt", "wb")
filetest.write("python 編程語言可以用到很多地方")
# 打開文件
filetest = open("file.txt", "rb")
strs = filetest.read(10)
print "文件內容是:", strs
# 定位文件位置
p = filetest.tell()
print "文件當前位置", p

# 重新設置文件讀取的位置
filetest.seek(0, 0)
print "將文件位置重新設置成功!!!"

print "重新設置指針位置之後讀取的文件"
strs = filetest.read(10)
print "文件內容是:", strs


print "關閉文件!"
filetest.close()  # 關閉文件
print "文件關閉成功!"

示例7運行結果:

文件內容是: python 編
文件當前位置 10
將文件位置重新設置成功!!!
重新設置指針位置之後讀取的文件
文件內容是: python 編
關閉文件!
文件關閉成功!

 

7.重命名和刪除文件
  Python的os模塊提供了幫你執行文件處理操作的方法,比如重命名和刪除文件。
  要使用這個模塊,你必須先導入它,然後才可以調用相關的各種功能。
  rename()方法:
  rename()方法需要兩個參數,當前的文件名和新文件名。
  語法:

os.rename(current_file_name, new_file_name)

示例8:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/25 15:12
# @Author  : wwyx
import os
filetest = open("myfile.txt", "wb")
# 文件寫入內容
filetest.write("python 基礎學習")
# 未年檢關閉!
filetest.close()
# 文件重新命名
os.rename("myfile.txt", "renamefile.txt")

print "重新命名後的文件名稱是:", filetest.name
# 以只讀方式打開重命名文件
fileremane = open("renamefile.txt", "r")
strs = fileremane.read(100)
print "文件名稱:", fileremane.name
print "讀取修改後文件的內容是:", strs

示例 8 運行結果:

重新命名後的文件名稱是: myfile.txt
文件名稱: renamefile.txt
讀取修改後文件的內容是: python 基礎學習

註意:如果目錄下麵已經存在相關名稱文件,那麼重命名就會出現異常

  remove()方法
  你可以用remove()方法刪除文件,需要提供要刪除的文件名作為參數。
  語法:

os.remove(file_name)

示例 9

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/25 15:12
# @Author  : wwyx
import os
filetest = open("myfile.txt", "wb")
# 文件寫入內容
filetest.write("python 基礎學習")
# 未年檢關閉!
filetest.close()
# 刪除文件
os.remove("myfile.txt")
# 重新讀取刪除掉的文件
filetest = open("myfile.txt", "rb")
# 列印出文件內容
print "文件內容是:", filetest.read(10)

示例 9 運行結果

Traceback (most recent call last):
  File "E:/python/hello/untitled3/filetest.py", line 14, in <module>
    filetest = open("myfile.txt", "rb")
IOError: [Errno 2] No such file or directory: 'myfile.txt'

運行結果:因為讀取了一個刪除掉的文件,所以會報異常

 

8. Python里的目錄
  所有文件都包含在各個不同的目錄下,不過Python也能輕鬆處理。os模塊有許多方法能幫你創建,刪除和更改目錄。
  mkdir()方法
  可以使用os模塊的mkdir()方法在當前目錄下創建新的目錄們。你需要提供一個包含了要創建的目錄名稱的參數。
  語法:

os.mkdir("newdir")

 

  chdir()方法
  可以用chdir()方法來改變當前的目錄,修改目錄路徑。chdir()方法需要的一個參數是你想設成當前目錄的目錄名稱。
  語法:

os.chdir("newdir")

 

  getcwd()方法
  getcwd()方法顯示當前的工作目錄。
  語法:

os.getcwd()

  rmdir()方法
  rmdir()方法刪除目錄,目錄名稱以參數傳遞。
  在刪除這個目錄之前,它的所有內容應該先被清除。
  語法:

os.rmdir('dirname')

示例10:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2016/9/25 15:12
# @Author  : wwyx
import os
# 創建一個目錄
os.mkdir("mydir")
# 獲取當前目錄
nowdir = os.getcwd()
print "當前目錄:", nowdir
# 重新定位目錄,修改目錄路徑
os.chdir("mydir")
# 獲取修改後的目錄路徑
updatedir = os.getcwd()
print "修改後的當前目錄是:",updatedir
ind = updatedir.rfind("\\")
print "截取後的字元串", ind
print "type:", type(updatedir)
newdir = updatedir[0:int(ind)]
print "new dir", newdir
# 重新定位目錄,修改目錄路徑
os.chdir(newdir)
# 獲取修改後的目錄路徑
updatedir = os.getcwd()
print "修改後的當前目錄是:",updatedir
# 刪除目錄
os.rmdir("mydir")
# 獲取刪除後的目錄路徑
deletedir = os.getcwd()
print "修改後的當前目錄是:",deletedir

示例10 運行結果:

當前目錄: E:\python\hello\untitled3
修改後的當前目錄是: E:\python\hello\untitled3\mydir
截取後的字元串 25
type: <type 'str'>
new dir E:\python\hello\untitled3
修改後的當前目錄是: E:\python\hello\untitled3
修改後的當前目錄是: E:\python\hello\untitled3

 

9.文件、目錄相關的方法
  三個重要的方法來源能對Windows和Unix操作系統上的文件及目錄進行一個廣泛且實用的處理及操控,如下:

  • File 對象方法: file對象提供了操作文件的一系列方法。
  • OS 對象方法: 提供了處理文件及目錄的一系列方法。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • python開發【第一篇】:目錄 python開發【第二篇】:python初體驗 python開發【第三篇】: python開發【第四篇】: python開發【第五篇】: python開發【第六篇】: ...
  • hibernate入門 1、orm hibernate是一個經典的開源的orm[數據訪問中間件]框架 ORM( Object Relation Mapping)對象關係映射 通過 對象模型 操作 資料庫關係模型 hibernate處於項目的持久層位置,因此又稱為持久層框架 2、hibernate核心 ...
  • DOM基於樹形,SAX基於事件,DOM4J和JDOM基於底層API ...
  • 在剛學習SpringMVC框架整合時,你也許會產生疑問為什麼Spring.xml和SpringMVC.xml中都有註解過濾。 <context:component-scan base-package="myproject"> 和<context:component-scan base-package ...
  • 前言 最近要找工作,免不得要有一番筆試,今年好像突然就都流行線上筆試了,真是搞的我一塌糊塗。有的公司呢,不支持Python,Java我也不會,C有些數據結構又有些複雜,所以是時候把STL再看一遍了…不會告訴你距離上次使用可能已經有半年以上了。 STL是什麼 STL為C++的標準模版庫,又稱為C++泛 ...
  • 20160923 定義:將一個類的定義放在另一個類的內部; 從外部類的非靜態方法之外,創建某個內部類的對象:OutClassName.InnerClassName; 內部類擁有所有其外部類的成員的訪問權; 成員內部類不能含有static修飾的變數和方法,因為成員內部類需要先創建了外部類,才能創建它自 ...
  • SpringMVC又一個漂亮的web框架,他與Struts2並駕齊驅,Struts出世早而占據了一定優勢,下麵同樣做一個簡單的應用實例,介紹SpringMVC的基本用法,接下來的博客也將梳理一下Struts2和SpringMVC的一些異同,通過梳理和舊知識的聯繫,讓學習的成本變低,花很短的時間就可以 ...
  • 分別使用序數和enummap的結果: 序數: test1() 使用enummap,tes1t ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...