程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

[python] fileinput模塊

編輯:Python

fileinput模塊能處理來自一個或多個文件的輸入。
自動讀取命令行參數(由sys.argv)並將其視為輸入文件的列表 --> 按順序讀取數據行

【例1】drop2hash.py的作用是剔除所有以“##”開頭的行

import fileinput
def main():
for line in fileinput.input():
if not line.startswith('##'):
print(line, end="")
main()

現假定有兩個數據文件
sole1.tst

## sole1.tst: test data for the sole function
0 0 0
0100 0
##
0100100

sole2.tst

## sole2.tst: more test data for the sole function
12 15 0
##
100100 0

執行 python3 drop2hash.py sole1.tst sole2.tst​​
結果將會把這兩個文件的數據拼接起來,並剔除所有的注釋行

# python3 drop2hash.py sole1.tst sole2.tst
0 0 0
0100 0
0100100
12 15 0
100100 0

該模塊還提供了很多其他函數,可隨時了解已讀取的總行數(lineno)、已從當前文件讀取的行數(filelineno)、當前文件名(filename)、當前行是否為文件的首行(isfirstline)、是否正從標准輸入讀取(isstdin)。還可隨時跳到下一個文件(nextfile)或關閉整個文件流(close)。

【例2】linestatistics.py 把輸入文件中的文本行拼接起來,並加上文件開始分界符,同時統計行數

import fileinput
def main():
for line in fileinput.input():
if fileinput.isfirstline():
print("<start of file {0}>".format(fileinput.filename()))
print("Progress>>> curent file lines: ",fileinput.filelineno(),
" total lines: ",fileinput.lineno())
main()

python3 linestatistics.py sole1.tst sole2.tst的執行結果如下

# python3 linestatistics.py sole1.tst sole2.tst
<start of file sole1.tst>
Progress>>> curent file lines:  1  total lines:  1
Progress>>> curent file lines:  2  total lines:  2
Progress>>> curent file lines:  3  total lines:  3
Progress>>> curent file lines:  4  total lines:  4
Progress>>> curent file lines:  5  total lines:  5
<start of file sole2.tst>
Progress>>> curent file lines:  1  total lines:  6
Progress>>> curent file lines:  2  total lines:  7
Progress>>> curent file lines:  3  total lines:  8
Progress>>> curent file lines:  4  total lines:  9

如果調用fileinput.input時帶了一個文件名或文件名列表作為參數,這些文件就會被用作輸入文件,而不再采用sys.argv中的參數。fileinput.input還有一個可選參數inplace,可將輸出結果存回輸入文件中,同時將原始文件保留為備份文件。

【例3】addlinenum.py 內容如下,fileinput.input時帶文件名

import fileinput
with fileinput.input(files="sole1.tst",inplace=False) as f:
for line in f:
line = line.strip()
num = fileinput.lineno()
print("#{0} {1}".format(num, line))

執行 python3 addlinenum.py 打屏如下,inplace=False 輸入文件sole1.tst內容不變

#1 ## sole1.tst: test data for the sole function
#2 0 0 0
#3 0100 0
#4 ##
#5 0100100

將addlinenum.py 內容修改如下,inplace=True,backup="solebk",不打屏,直接修改源文件;備份源文件到sole1.tstsolebk;如果不提供backup參數則不備份

[[email protected] ~]# cat addlinenum.py
import fileinput
with fileinput.input(files="sole1.tst",inplace=True,backup="solebk") as f:
for line in f:
line = line.strip()
num = fileinput.lineno()
print("#{0} {1}".format(num, line))
[[email protected] ~]#
============================================================
[[email protected] ~]# cat sole1.tst
## sole1.tst: test data for the sole function
0 0 0
0100 0
##
0100100
[[email protected] ~]#
[[email protected] ~]# python3 addlinenum.py
[[email protected] ~]#
[[email protected] ~]# ls -l sole1*
-rw-r--r-- 1 root root 85 Jul 3 11:32 sole1.tst
-rw-r--r-- 1 root root 70 Jul 3 11:32 sole1.tstsolebk
[[email protected] ~]#
[[email protected] ~]# cat sole1.tst
#1 ## sole1.tst: test data for the sole function
#2 0 0 0
#3 0100 0
#4 ##
#5 0100100
[[email protected] ~]#
[[email protected] ~]# cat sole1.tstsolebk
## sole1.tst: test data for the sole function
0 0 0
0100 0
##
0100100
[[email protected] ~]#

參考資料:

Python常用標准庫之fileinput  https://www.cnblogs.com/nykuo/p/13024272.html
《Python 快速入門(第3版)》11.1.5 fileinput模塊的使用


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved