python中的檔案是什麼 python中的檔案

2021-10-11 13:12:30 字數 3547 閱讀 7860

python檔案

1、    概述

檔案物件不僅可以用來訪問普通的磁碟檔案,也可以訪問任何其他型別抽象層面上的檔案。

內建函式open()以及file()提供了初始化輸入輸出(i/o)操作的通用介面。open()內建函式成功開啟檔案之後會返回乙個檔案物件,否則引發乙個錯誤,當操作失敗的時候,會出現乙個ioerror的異常,基本語法如下:

file_object = open(file_name,access_mode=』r』,buffering=-1)

檔名稱file_name可以是絕對路徑或者是相對路徑,access_mode是乙個字串,表示為檔案開啟的模式,經常使用的模式有r,w,a,分別表示為讀取,寫入,追加,還有乙個u模式,表示為通用換行符的支援。

在預設情況下,如果沒有使用access_mode引數,那麼預設為唯讀的,在使用w的時候,若檔案存在,那麼先清空,然後建立,在使用各種模式的時候,二進位制讀寫的b不能作為開頭。

在open()和file()方法中,open是file的別名,兩者是完全相同的。

通用換行符的支援,uns,在不同的平台中,使用不通的符號來表示行結束,例如\n,\r\n或者\r,

在使用換行符的時候,只對讀取的時候有作用,在輸入的時候必須進行自己進行處理。

2、 檔案的內建方法

open()成功執行並返回乙個檔案物件之後,所有對該檔案的後續操作都將通過這個「控制代碼」進行,檔案方法可以分成四類:輸入,輸出,檔案內移動,以及雜項操作。

2.1 輸入

read()方法用來直接讀取位元組到字串,最多讀取給定數目個位元組,如果沒有給定size引數或者size為負值,檔案將被讀取至末尾。

readline()方法讀取開啟檔案的一行,然後整行,包括行結束符,作為字串返回。

readlines()方法會讀取所有的行並將它們作為乙個字串列表返回,可選引數ssize個位元組。

2.2 輸出

write()方法將含有文字資料或二進位制資料庫的字串寫入到檔案中。

writelines()方法是針對列表的操作,接收乙個字串列表作為引數,然後將它們寫入檔案,但是在寫入的時候,換行符並不會被自動加入,所以在每次處理的時候,必須手動的給每行的結尾加上行結束符。

保留分隔符:注意,在使用輸入方法read()和readlines()方法從檔案中讀取行的時候,python並不會刪除行結束符的操作,從而會出現以下**:

>>> f = open("kel")

>>> data = [line.strip() for line in f.readlines()]

>>> f.close()

>>> data

['this is the test', 'this is the one line', 'this is the second line', 'how old are you', 'this is off your old', 'how weight are you', 'how height are you']

2.3 檔案內移動

在檔案內移動的時候,使用的方法為seek(),表示移動多少個位元組,顯示當前位置,可以使用tell()。在移動未知的時候,seek(number,whence),引數number表示移動的位元組數,引數whence只有三個值,分別為0,1,2,分別表示為檔案開頭,檔案當前未知算起,檔案末尾。

2.4 檔案的迭代

一行一行的訪問檔案很簡單,如下:

>>> f = open("kel")

>>> for line in f:

...     print line,

在這個迴圈裡,line表示乙個檔案的一行,包括末尾的行結束符。

也可以使用下面的方法:

>>> f = open("kel")

>>> for line in f.readlines():

...     print line,

2.5 其他

close()方法表示關閉檔案,在每次開啟檔案之後,記得呼叫colse方法來關閉檔案。

truncate()方法表示將檔案清空,如果具有引數size,那麼就會truncate到size個位元組

flush()方法表示直接把記憶體緩衝區資料l立刻寫入到檔案,而不是被動的等待輸出緩衝區被寫入。

2.6 檔案方法雜項

重寫輸出所有行的例子如下:

>>> f = open("kel")

>>> alllines = f.readlines()

>>> f.close()

>>> for eachline in alllines:

...     print eachline,

在這裡所需要注意的是,先是將所有的內容全部讀出,然後關閉檔案之後,再來進行處理,這種方法的不好之處在於,如果檔案過大,那麼還是每次進行輸出一行進行操作。

>>> f = open("kel")

>>> for eachline in f :

...     print eachline,

行分隔符在作業系統中的顯示差異,在posix系統中,換行符為\n,在windows系統中使用了\r\n,在macos中使用\r,如果要想跨平台,那麼可以使用os模組中的屬性。

os模組屬性

描述linesep

用於在檔案中分割行的字串

sep用來分割檔案路徑名的字串

pathsep

用於分割檔案路徑的字串

curdir

當前工作目錄的字串名稱

pardir

父目錄字串名稱

不管使用什麼平台,只要匯入了os模組,那麼這些變數自動設定為正確的值。

在print語句中,會預設在輸出內容末尾後新增乙個換行符,從而在每次使用print的時候,新增乙個逗號即可,在readline和readlines方法中不對行裡的空白字元做任何處理。

下面的指令碼主要是用來輸入一些語句,然後儲存在檔案中,當輸入為點的時候,退出,在這裡使用了os.linesep從而新增上正確的換行符號。

#!/usr/bin/env python

import os

filename = raw_input("enter file name:")

fobj = open(filename,"w")

while true:

aline =raw_input("enter a line('.'is to quit):")

if aline == ".":

break

else:

fobj.write("%s%s" %(aline,os.linesep))

fobj.close()

下面是關於seek和tell的例子,需要注意的是,在遍歷的時候,游標是移動的,注意處理游標的位置:

#!/usr/bin/env python

f = open("kel")

print f.tell()

print f.readline()

print f.tell()

f.seek(20)

print f.readline()

print f.tell()

f.close()

核心模組os和os.path,這兩個模組提供了訪問計算機檔案系統的不同方法。

python中跨檔案引入 py檔案

在本地可以通過在pycharm裡將檔案目錄調整為sources root實現。但在伺服器裡,需要通過如下方式跨檔案呼叫.py檔案。程式結構如下 src mod1.py test1.py 若在程式test1.py中匯入模組mod1,則直接使用 import mod1 或from mod1 import...

vimrc檔案中的是什麼?

我在很多.vimrc檔案中看到,我想知道它是什麼意思?它是幹什麼用的?只是對目的和用法的一般概述將是偉大的。領導者金鑰 是一種通過使用金鑰序列來執行命令來擴充套件vim快捷方式的功能的方法。預設的leader鍵是反斜槓。因此,如果您有q的地圖,則可以通過鍵入 q來執行該操作。在我的系統中它的 鍵。它...

python中的序列是什麼 Python中的序列

什麼是序列?列表 元組和字串都是序列。為了讓我們方便的在序列中抓取乙個特定的專案,具備這樣的特點 1 成員檢驗 2 索引操作符 一些基本操作 operationresultnotes x in s true if an item of s is equal to x,else false x not...