Python 檔案處理

2021-09-27 09:32:55 字數 4373 閱讀 8561

使用 open() 函式開啟檔案。它需要兩個引數,第乙個引數是檔案路徑或檔名,第二個是檔案的開啟模式。模式通常是下面這樣的:

「w」,以寫入模式開啟,如果檔案存在將會刪除裡面的所有內容,然後開啟這個檔案進行寫入;

「a」,以追加模式開啟,寫入到檔案中的任何資料將自動新增到末尾。

預設的模式為唯讀模式,也就是說如果你不提供任何模式,open() 函式將會以唯讀模式開啟檔案。

開啟檔案後我們應該總是關閉檔案。我們使用方法 close() 完成這個操作。

>>

> fobj =

open

("sample.txt"

)>>

> fobj

'sample.txt' mode=

'r' encoding=

'utf-8'

>

>>

> fobj.close(

)

始終確保你顯式關閉每個開啟的檔案,一旦它的工作完成你沒有任何理由保持開啟檔案。因為程式能開啟的檔案數量是有上限的。如果你超出了這個限制,沒有任何可靠的方法恢復,因此程式可能會崩潰。每個開啟的檔案關聯的資料結構(檔案描述符/控制代碼/檔案鎖…)都要消耗一些主存資源。因此如果許多開啟的檔案沒用了你可以結束大量的記憶體浪費,並且檔案開啟時始終存在資料損壞或丟失的可能性。

使用 read() 方法一次性讀取整個檔案:

>>

> fobj =

open

("sample.txt"

)>>

> fobj.read(

)'i love python\ni love shiyanlou\n'

>>

> fobj.close(

)

如果你再一次呼叫 read(),它會返回空字串因為它已經讀取完整個檔案。

read(size) 有乙個可選的引數 size,用於指定字串長度。如果沒有指定 size 或者指定為負數,就會讀取並返回整個檔案。

readline() 能幫助你每次讀取檔案的一行:

>>

> fobj =

open

("sample.txt"

)>>

> fobj.readline(

)'i love python\n'

>>

> fobj.readline(

)'i love shiyanlou\n'

>>

> fobj.close(

)

使用 readlines() 方法讀取所有行到乙個列表中:

>>

> fobj =

open

('sample.txt'

)>>

> fobj.readlines()[

'i love python\n'

,'i love shiyanlou\n'

]>>

> fobj.close(

)

你可以迴圈遍歷檔案物件來讀取檔案中的每一行:

>>

> fobj =

open

('sample.txt'

)>>

>

for x in fobj:..

.print

(x, end ='')

... i love python

i love shiyanlou

>>

> fobj.close(

)

通過 write() 方法進行檔案的寫入:

>>

> fobj =

open

("ircnicks.txt"

,'w'

)>>

> fobj.write(

'powerpork\n'

)>>

> fobj.write(

'indrag\n'

)>>

> fobj.write(

'mishti\n'

)>>

> fobj.write(

'sankarshan'

)>>

> fobj.close(

)

#!/usr/bin/env python3

import sys

iflen

(sys.ar**)

<3:

print

("wrong parameter"

)print

("./copyfile.py file1 file2"

) sys.exit(1)

f1 =

open

(sys.ar**[1]

)s = f1.read(

)f1.close(

)f2 =

open

(sys.ar**[2]

,'w'

)f2.write(s)

sys.ar** 包含所有命令列引數。這個程式的功能完全可以使用 shell 的 cp 命令替代:在 cp 後首先輸入被拷貝的檔案的檔名,然後輸入新檔名。

sys.ar** 的第乙個值是命令自身的名字,下面這個程式列印命令列引數:

#!/usr/bin/env python3

import sys

print

("first value"

, sys.ar**[0]

)print

("all values"

)for i, x in

enumerate

(sys.ar**)

:print

(i, x)

執行程式:

$ .

/ar**test.py hi there

first value .

/ar**test.py

all values0.

/ar**test.py

1 hi

2 there

#!usr/bin/env python3

import os

import sys

defparse_file

(path)

: i =

0 space =

0 tabs =

0 fd =

open

(path)

for i, line in

enumerate

(fd)

: space += line.count('')

tabs += line.count(

'\t'

) retrun i+

1, space, tabs

defmain

(path)

:if os.path.exits(path)

: lines, space, tabs = parse_file(path)

print

("spaces {}. tabs {}. lines {}"

.format

(space, tabs, lines)

)return

true

else

:return

false

if __name__ ==

'__main__':if

len(sys.ar**)

>1:

main(sys.ar**[1]

)else

: sys.exit(-1

) sys.exit(

0)

sys.exit(n) 退出程式引發systemexit異常, 可以捕獲異常執行些清理工作. n預設值為0, 表示正常退出. 其他都是非正常退出. 還可以sys.exit(「sorry, goodbye!」); 一般主程式中使用此退出。

os._exit(n), 直接退出, 不拋異常, 不執行相關清理工作. 常用在子程序的退出。

在實際情況中,我們應該嘗試使用 with 語句處理檔案物件,它會在檔案用完後會自動關閉,就算發生異常也沒關係。它是 try-finally 塊的簡寫:

>>

>

with

open

('sample.txt'

)as fobj:..

.for line in fobj:..

.print

(line, end ='')

... i love python

i love shiyanlou

python檔案處理

def cal input input.txt output output.txt cal方法為主程式,推薦這樣做而不是python.exe xx.py 預設引數為python目錄的兩個txt,如為其他檔案自己指定。infile file input,r 開啟源資料檔案 outfile file o...

python 檔案處理

1.開啟檔案 open a.txt 當前目錄下的a.txt open root a.txt 開啟某個目錄下的檔案 2.按行顯示檔案 a open a.txt a.readline ni hao n a.readline wo xianzai hen xiang ni n a.readline ni ...

Python檔案處理

open name mode buf read size readline size readlines size 這裡的size是指,io定義的default buffer size為單位大小 iter 迭代器迭代每行 write str writelines sequwence of strin...