使用 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...