成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > python 使用fileinput讀取文件

python 使用fileinput讀取文件

熱門標(biāo)簽:西藏智能外呼系統(tǒng)五星服務(wù) 清遠360地圖標(biāo)注方法 平頂山外呼系統(tǒng)免費 原裝電話機器人 千陽自動外呼系統(tǒng) 400電話申請服務(wù)商選什么 工廠智能電話機器人 在哪里辦理400電話號碼 江蘇客服外呼系統(tǒng)廠家

fileinput 是 Python 的內(nèi)置模塊,但我相信,不少人對它都是陌生的。今天我把 fileinput 的所有的用法、功能進行詳細的講解,并列舉了一些非常實用的案例,對于理解和使用它可以說完全沒有問題。

1. 從標(biāo)準(zhǔn)輸入中讀取

當(dāng)你的 Python 腳本沒有傳入任何參數(shù)時,fileinput 默認(rèn)會以 stdin 作為輸入源

# demo.py
import fileinput

for line in fileinput.input():
    print(line) 

效果如下,不管你輸入什么,程序會自動讀取并再打印一次,像個復(fù)讀機似的。

$ python demo.py 
hello
hello

python
python

2. 單獨打開一個文件

單獨打開一個文件,只需要在 files 中輸入一個文件名即可

import fileinput

with fileinput.input(files=('a.txt',)) as file:
    for line in file:
        print(f'{fileinput.filename()} 第{fileinput.lineno()}行: {line}', end='') 

其中 a.txt 的內(nèi)容如下

hello
world

執(zhí)行后就會輸出如下

$ python demo.py
a.txt 第1行: hello
a.txt 第2行: world

需要說明的一點是,fileinput.input() 默認(rèn)使用 mode='r' 的模式讀取文件,如果你的文件是二進制的,可以使用mode='rb' 模式。fileinput 有且僅有這兩種讀取模式。

3. 批量打開多個文件

從上面的例子也可以看到,我在 fileinput.input 函數(shù)中傳入了 files 參數(shù),它接收一個包含多個文件名的列表或元組,傳入一個就是讀取一個文件,傳入多件就是讀取多個文件。

import fileinput

with fileinput.input(files=('a.txt', 'b.txt')) as file:
    for line in file:
        print(f'{fileinput.filename()} 第{fileinput.lineno()}行: {line}', end='') 

a.txt 和 b.txt 的內(nèi)容分別是

$ cat a.txt
hello
world
$ cat b.txt
hello
python

運行后輸出結(jié)果如下,由于 a.txt 和 b.txt 的內(nèi)容被整合成一個文件對象 file ,因此 fileinput.lineno() 只有在讀取一個文件時,才是原文件中真實的行號。

$ python demo.py
a.txt 第1行: hello
a.txt 第2行: world
b.txt 第3行: hello
b.txt 第4行: python

如果想要在讀取多個文件的時候,也能讀取原文件的真實行號,可以使用 fileinput.filelineno() 方法

import fileinput

with fileinput.input(files=('a.txt', 'b.txt')) as file:
    for line in file:
        print(f'{fileinput.filename()} 第{fileinput.filelineno()}行: {line}', end='')

運行后,輸出如下

$ python demo.py
a.txt 第1行: hello
a.txt 第2行: world
b.txt 第1行: hello
b.txt 第2行: python

這個用法和 glob 模塊簡直是絕配

import fileinput
import glob

for line in fileinput.input(glob.glob("*.txt")):
    if fileinput.isfirstline():
        print('-'*20, f'Reading {fileinput.filename()}...', '-'*20)
    print(str(fileinput.lineno()) + ': ' + line.upper(), end="")

運行效果如下

$ python demo.py
-------------------- Reading b.txt... --------------------
1: HELLO
2: PYTHON
-------------------- Reading a.txt... --------------------
3: HELLO
4: WORLD

4. 讀取的同時備份文件

fileinput.input 有一個 backup 參數(shù),你可以指定備份的后綴名,比如 .bak

import fileinput


with fileinput.input(files=("a.txt",), backup=".bak") as file:
    for line in file:
        print(f'{fileinput.filename()} 第{fileinput.lineno()}行: {line}', end='') 

運行的結(jié)果如下,會多出一個 a.txt.bak 文件

$ ls -l a.txt*
-rw-r--r--  1 MING  staff  12  2 27 10:43 a.txt

$ python demo.py
a.txt 第1行: hello
a.txt 第2行: world

$ ls -l a.txt*
-rw-r--r--  1 MING  staff  12  2 27 10:43 a.txt
-rw-r--r--  1 MING  staff  42  2 27 10:39 a.txt.bak

5. 標(biāo)準(zhǔn)輸出重定向替換

fileinput.input 有一個 inplace 參數(shù),表示是否將標(biāo)準(zhǔn)輸出的結(jié)果寫回文件,默認(rèn)不取代

請看如下一段測試代碼

import fileinput

with fileinput.input(files=("a.txt",), inplace=True) as file:
    print("[INFO] task is started...") 
    for line in file:
        print(f'{fileinput.filename()} 第{fileinput.lineno()}行: {line}', end='') 
    print("[INFO] task is closed...") 

運行后,會發(fā)現(xiàn)在 for 循環(huán)體內(nèi)的 print 內(nèi)容會寫回到原文件中了。而在 for 循環(huán)體外的 print 則沒有變化。

$ cat a.txt
hello
world

$ python demo.py
[INFO] task is started...
[INFO] task is closed...

$ cat a.txt 
a.txt 第1行: hello
a.txt 第2行: world

利用這個機制,可以很容易的實現(xiàn)文本替換。

import sys
import fileinput

for line in fileinput.input(files=('a.txt', ), inplace=True):
    #將Windows/DOS格式下的文本文件轉(zhuǎn)為Linux的文件
    if line[-2:] == "\r\n":  
        line = line + "\n"
    sys.stdout.write(line)

附:如何實現(xiàn) DOS 和 UNIX 格式互換以供程序測試,使用 vim 輸入如下指令即可

DOS轉(zhuǎn)UNIX::setfileformat=unix
UNIX轉(zhuǎn)DOS::setfileformat=dos

6. 不得不介紹的方法

如果只是想要 fileinput 當(dāng)做是替代 open 讀取文件的工具,那么以上的內(nèi)容足以滿足你的要求。

  • fileinput.filenam()

返回當(dāng)前被讀取的文件名。在第一行被讀取之前,返回 None。

  • fileinput.fileno()

返回以整數(shù)表示的當(dāng)前文件“文件描述符”。當(dāng)未打開文件時(處在第一行和文件之間),返回 -1。

  • fileinput.lineno()

返回已被讀取的累計行號。在第一行被讀取之前,返回 0。在最后一個文件的最后一行被讀取之后,返回該行的行號。

  • fileinput.filelineno()

返回當(dāng)前文件中的行號。在第一行被讀取之前,返回 0。在最后一個文件的最后一行被讀取之后,返回此文件中該行的行號。

但若要想基于 fileinput 來做一些更加復(fù)雜的邏輯,也許你會需要用到如下這幾個方法

  • fileinput.isfirstline()

如果剛讀取的行是其所在文件的第一行則返回 True,否則返回 False。

  • fileinput.isstdin()

如果最后讀取的行來自 sys.stdin 則返回 True,否則返回 False。

  • fileinput.nextfile()

關(guān)閉當(dāng)前文件以使下次迭代將從下一個文件(如果存在)讀取第一行;不是從該文件讀取的行將不會被計入累計行數(shù)。直到下一個文件的第一行被讀取之后文件名才會改變。在第一行被讀取之前,此函數(shù)將不會生效;它不能被用來跳過第一個文件。在最后一個文件的最后一行被讀取之后,此函數(shù)將不再生效。

  • fileinput.close()

關(guān)閉序列。

7. 進階一點的玩法

在 fileinput.input() 中有一個 openhook 的參數(shù),它支持用戶傳入自定義的對象讀取方法。

若你沒有傳入任何的勾子,fileinput 默認(rèn)使用的是 open 函數(shù)。

fileinput  為我們內(nèi)置了兩種勾子供你使用

  • fileinput.hook_compressed(*filename*, *mode*)

使用 gzip 和 bz2 模塊透明地打開 gzip 和 bzip2 壓縮的文件(通過擴展名 '.gz' 和 '.bz2' 來識別)。如果文件擴展名不是 '.gz' 或 '.bz2',文件會以正常方式打開(即使用 open() 并且不帶任何解壓操作)。使用示例: fi = fileinput.FileInput(openhook=fileinput.hook_compressed)

  • fileinput.hook_encoded(*encoding*, *errors=None*)

返回一個通過 open() 打開每個文件的鉤子,使用給定的 encoding 和 errors 來讀取文件。使用示例: fi = fileinput.FileInput(openhook=fileinput.hook_encoded("utf-8", "surrogateescape"))

如果你自己的場景比較特殊,以上的三種勾子都不能滿足你的要求,你也可以自定義。

這邊我舉個例子來拋磚引玉下

假如我想要使用 fileinput 來讀取網(wǎng)絡(luò)上的文件,可以這樣定義勾子。

  • 先使用 requests 下載文件到本地
  • 再使用 open 去讀取它
def online_open(url, mode):
    import requests
    r = requests.get(url) 
    filename = url.split("/")[-1]
    with open(filename,'w') as f1:
        f1.write(r.content.decode("utf-8"))
    f2 = open(filename,'r')
    return f2

直接將這個函數(shù)傳給 openhook 即可

import fileinput

file_url = 'https://www.csdn.net/robots.txt'
with fileinput.input(files=(file_url,), openhook=online_open) as file:
    for line in file:
        print(line, end="")

運行后按預(yù)期一樣將 CSDN 的 robots 的文件打印了出來

User-agent: * 
Disallow: /scripts 
Disallow: /public 
Disallow: /css/ 
Disallow: /images/ 
Disallow: /content/ 
Disallow: /ui/ 
Disallow: /js/ 
Disallow: /scripts/ 
Disallow: /article_preview.html* 
Disallow: /tag/
Disallow: /*?*
Disallow: /link/

Sitemap: https://www.csdn.net/sitemap-aggpage-index.xml
Sitemap: https://www.csdn.net/article/sitemap.txt 

8. 列舉一些實用案例

案例一:讀取一個文件所有行

import fileinput
for line in fileinput.input('data.txt'):
  print(line, end="")

案例二:讀取多個文件所有行

import fileinput
import glob

for line in fileinput.input(glob.glob("*.txt")):
    if fileinput.isfirstline():
        print('-'*20, f'Reading {fileinput.filename()}...', '-'*20)
    print(str(fileinput.lineno()) + ': ' + line.upper(), end="")

案例三:利用fileinput將CRLF文件轉(zhuǎn)為LF

import sys
import fileinput

for line in fileinput.input(files=('a.txt', ), inplace=True):
    #將Windows/DOS格式下的文本文件轉(zhuǎn)為Linux的文件
    if line[-2:] == "\r\n":  
        line = line + "\n"
    sys.stdout.write(line)

案例四:配合 re 做日志分析:取所有含日期的行

#--樣本文件--:error.log
aaa
1970-01-01 13:45:30  Error: **** Due to System Disk spacke not enough...
bbb
1970-01-02 10:20:30  Error: **** Due to System Out of Memory...
ccc

#---測試腳本---
import re
import fileinput
import sys

pattern = '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'

for line in fileinput.input('error.log',backup='.bak',inplace=1):
    if re.search(pattern,line):
        sys.stdout.write("=> ")
        sys.stdout.write(line)

#---測試結(jié)果---
=> 1970-01-01 13:45:30  Error: **** Due to System Disk spacke not enough...
=> 1970-01-02 10:20:30  Error: **** Due to System Out of Memory...

案例五:利用fileinput實現(xiàn)類似于grep的功能

import sys
import re
import fileinput

pattern= re.compile(sys.argv[1])
for line in fileinput.input(sys.argv[2]):
    if pattern.match(line):
        print(fileinput.filename(), fileinput.filelineno(), line)

$ ./demo.py import.*re *.py
#查找所有py文件中,含import re字樣的
addressBook.py  2   import re
addressBook1.py 10  import re
addressBook2.py 18  import re
test.py         238 import re

9. 寫在最后

fileinput 是對 open 函數(shù)的再次封裝,在僅需讀取數(shù)據(jù)的場景中, fileinput 顯然比 open 做得更專業(yè)、更人性,當(dāng)然在其他有寫操作的復(fù)雜場景中,fileinput 就無能為力啦,本身從 fileinput 的命名上就知道這個模塊只專注于輸入(讀)而不是輸出(寫)。

以上就是python 使用fileinput讀取文件的詳細內(nèi)容,更多關(guān)于python 用fileinput讀取文件的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Python fileinput模塊如何逐行讀取多個文件
  • python文件處理fileinput使用方法詳解
  • python 使用sys.stdin和fileinput讀入標(biāo)準(zhǔn)輸入的方法
  • Python使用os模塊和fileinput模塊來操作文件目錄
  • Python中的fileinput模塊的簡單實用示例
  • Python fileinput模塊使用實例
  • Python fileinput模塊使用實例
  • python使用fileinput模塊實現(xiàn)逐行讀取文件的方法
  • Python fileinput模塊使用介紹

標(biāo)簽:錦州 白城 西安 安慶 股票 隨州 天水 日照

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python 使用fileinput讀取文件》,本文關(guān)鍵詞  python,使用,fileinput,讀取,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python 使用fileinput讀取文件》相關(guān)的同類信息!
  • 本頁收集關(guān)于python 使用fileinput讀取文件的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    黑巨人与欧美精品一区| 色悠久久久久综合网小说| 在线视频福利一区| 精品夜色国产国偷在线| 四虎影视亚洲| 国产精品毛片久久久久久久av| 国产无码精品在线观看| 天天综合色天天综合色hd| 成人免费观看在线| 99国产精品视频免费观看一公开| 国产美女主播在线| 高清一区二区三区| 久久久久久久香蕉网| 精品国产欧美一区二区五十路| 婷婷丁香激情综合| 在线观看av网站| 日韩一区二区三区av| 在线观看国产精品91| 免费看黄裸体一级大秀欧美| 亚洲男人天堂网址| 99久久国产综合精品女小说| 国产真实伦在线观看| 国产久草在线| 五月婷婷六月丁香| 伊人影院综合网| 成人国产精品久久久| 996久久国产精品线观看| 在线视频你懂| 久久365资源| www.毛片com| 最后生还者第二季在线观看| 91精品国产综合久久精品图片| 制服丝袜激情欧洲亚洲| 懂色中文一区二区三区在线视频| 在线观看免费一区二区| 国产亚洲一区二区在线观看| 亚洲美女视频在线| 希岛爱理一区二区三区av高清| 亚洲欧美一区二区激情| 大胆人体一区| 国产精品电影久久久久电影网| 精品人妻无码一区| 精品久久国产字幕高潮| 日韩影视精品| 日韩国产精品一区二区三区| 亚洲另类春色校园小说| 成人久久电影| 91亚洲精华国产精华精华液| 国产精品第十页| 欧美第一区第二区| 日韩精品分区| 成人免费淫片在线费观看| 久久伊人一区二区| 男女啪啪999亚洲精品| a天堂中文在线观看| 中文字幕+乱码+中文字幕一区| 日本国产一区二区三区| 四虎海外影库www4hu| 日韩理论片久久| 久久九九免费视频| 国产特级淫片高清视频| 成人影院在线观看视频| 中文字幕亚洲一区二区三区| 北条麻妃在线视频| 正在播放亚洲精品| 不卡视频在线看| 国产在线黄色| 日日夜夜亚洲精品| 美女免费久久| 国产日产亚洲精品系列| 国产精久久一区二区| 国产综合视频在线观看| 国产麻豆日韩欧美久久| 欧美激情一区二区三区在线| 日韩性生活视频| 一本大道久久a久久精二百| 日韩亚洲欧美一区| 免费看男女www网站入口在线| 欧美日本亚洲韩国国产| 精彩视频一区二区| 成人av手机在线| 亚洲欧美日韩精品| 香蕉视频在线网址| 91精品国产综合久久精品图片| 香蕉视频一区二区| 国产在线精品二区| ww国产内射精品后入国产| 色yeye免费人成网站在线观看| 独立日3在线观看完整版| 国产经典视频一区| 亚洲最大激情网| 欧美视频免费播放| 波多野结衣一二三区| 夜色福利资源站www国产在线视频| 性日韩欧美在线视频| 久久久久9999亚洲精品| 一区二区三区动漫| 丁香啪啪综合成人亚洲| 成人免费xx| 99热在线观看精品| 在线观看亚洲网站| 国产成人自拍视频在线观看| 97超碰在线免费| 手机看片福利永久国产日韩| 五月激情五月婷婷| 国产freexxxx性播放麻豆| 国产一区视频在线| 91另类视频| www视频在线观看com| 国产精品国产自产拍高清av水多| 日本久久久久亚洲中字幕| av网站免费在线播放| 日韩免费视频一区| 欧美特黄一级片| 日本一区二区乱| 日本不卡免费高清视频| 欧美日韩精品久久| 国产日韩一区| 高清国产一区二区| 精品999成人| 素人一区二区三区| 亚洲精品影院在线观看| 国产亚洲精品一区二区| 亚洲美女视频在线观看| 天堂av中文字幕| 日韩一级片在线播放| 国产香蕉免费精品视频| 日本美女一区二区三区视频| 日韩中文字幕精品视频| 欧美女人性生活视频| 国产免费区一区二区三视频免费| 欧美日韩精品免费| 欧洲另类一二三四区| 98视频在线噜噜噜国产| xxxxx69·hd| 欧美色涩在线第一页| 亚洲精品国产一区二区三区四区在线| 人妻无码一区二区三区久久99| 成人免费在线网| 在线黄色免费网站| 亚洲精品国产精品国自产| 丁香激情五月婷婷| 亚州国产精品视频| 亚洲电影在线一区二区三区| 日本男人天堂网| 一区二区三区四区在线免费观看| 中文字幕在线中文| 国产一区二区三区在线观看| 日韩一区二区三区四区五区六区| 亚洲天堂av资源在线观看| 日韩精品一区二区三区视频| 国产成人黄色片| 可以看毛片的网址| 91网页在线看| 成人做爰66片免费看网站| 婷婷六月国产精品久久不卡| 久久久成人网| 亚洲欧美中文日韩在线| 在线播放国产精品二区一二区四区| 国产偷v国产偷v亚洲高清| 视频一区二区精品| 霍思燕三级露全乳照| 国产成人啪免费观看软件| 国产99久久久| 蜜臀99久久精品久久久久久软件| 一区二区的视频| 国产伦精品一区二区三区在线| 国产精品久免费的黄网站| 日本动漫理论片在线观看网站| 国产精品久久三| 99在线精品视频免费观看软件| 免费在线观看日韩| 精品国产a一区二区三区v免费| 黄黄视频在线观看| 狠色狠色综合久久| 欧美成人一区二区三区片免费| 一区二区三区美女| 偷拍精品精品一区二区三区| 欧洲亚洲免费视频| 在线观看av网| 熟女性饥渴一区二区三区| 久久久久国产精品嫩草影院| 91高清在线视频| 欧美日韩大陆一区二区| 九一久久久久久| 怡红院成永久免费人全部视频| 国产精品视频一区视频二区| 波多野结衣视频网址| 50路60路老熟妇啪啪| 精品午夜福利视频| 国产天堂av| 精品爽片免费看久久| 久久久久久国产精品三级玉女聊斋| 日韩欧美视频免费观看| 中日韩视频在线观看| 天堂中文在线资| 四虎影视精品| 91亚洲精品丁香在线观看| 午夜亚洲精品| 国产欧美在线视频| 99这里都是精品| 2020中文字幕在线播放| 夜夜操com| 日本道色综合久久影院| 亚洲欧美日韩国产综合精品二区| 国产又大又黄的视频| 国产婷婷成人久久av免费高清| 中文字幕第8页| 激情五月综合婷婷| 亚洲不卡在线播放| 欧美日韩成人网| 嗯啊主人调教在线播放视频| 久久精品国产精品国产精品污| 久久国产精品-国产精品| 一区二区三区 在线观看视频| 日韩一区二区精品在线观看| 国产69精品久久久久久久久久| 不卡视频在线播放| 粗大的内捧猛烈进出在线视频| 欧美一区二区播放| 久久久精品三级| 私人影视中文字幕| 国产女女做受ⅹxx高潮| 久久久久国产精品人| 中文字幕字幕中文在线中不卡视频| 欧美一二区在线观看| 欧美一区二区三区爽爽爽| 91久久一区二区| 波多野结衣中文字幕一区| 噼里啪啦在线中文观看| 亚洲三级在线视频| 成人综合国产精品| 麻豆免费在线观看| 成人国产一区| 精品一区免费av| 亚洲老女人av| 97在线国产视频| 国产精品护士白丝一区av| 欧美另类videosbest视频| 羞羞网站免费观看| 成人小视频在线看| 欧美三级在线看| 狠狠人妻久久久久久综合蜜桃| 高清欧美电影在线| 国产日韩欧美综合精品| 老司机凹凸av亚洲导航| 国产高清亚洲| 国内精品久久久久久久久久久| 毛片网站免费观看| 国产性做久久久久久| 无码无套少妇毛多18pxxxx| 国产97在线观看| 欧美激情一区二区在线| 欧美不卡高清| 中文字幕在线观看日韩| 欧洲杯什么时候开赛| 午夜影院韩国伦理在线| 日韩性感在线| 日韩免费在线电影| 噜噜噜久久亚洲精品国产品小说| 国产真实生活伦对白| a级网站在线播放| 免费看a在线观看| 中文在线字幕免费观看| 性xxxxfjsxxxxx欧美| 亚洲精品一区二区18漫画| 国产电影一区| 伦理片一区二区| 日本高清视频在线观看| 成人免费观看在线视频| 亚洲精品97久久中文字幕无码| 亚洲av无一区二区三区| 日韩视频一区二区三区四区| 国产综合第一页| 国产一区二区三区精品视频| 国产精品高清一区二区| 欧美成人在线免费观看| 怡春院在线视频| 欧美色涩在线第一页| 婷婷四房综合激情五月| 91精品91久久久中77777老牛| 在线观看国产精品91| 一区二区三区四区免费观看| 99久久精品久久亚洲精品| 成人免费网站在线观看视频| 99蜜月精品久久91| 麻豆亚洲av成人无码久久精品| 香港成人在线视频| 九九热爱视频精品视频| 亚洲九九九在线观看| 日韩欧美色电影| 91人成网站www| 国产微拍精品一区| 欧美日韩性视频一区二区三区| 国产不卡一区| 亚洲一区在线不卡| 亚洲天堂2024| 精品中文字幕在线播放| 亚洲一区二区三区无吗| 青青青免费在线视频| 亚洲电影先锋| 欧美大黄免费观看| 国产成人精品www牛牛影视| 国产视频高清免费| 97**国产露脸精品国产| 国产激情自拍| 99亚洲伊人久久精品影院红桃| h在线观看视频免费网站| 欧美精品一卡| 日本免费网站在线观看| 日韩美女在线观看| 欧美电影在线观看完整版| 日韩亚洲一区在线| 国产成人av一区二区三区| 国产成人aaa| 久久这里只精品| 日本最黄一级片免费在线| 黑人精品欧美一区二区蜜桃| 久久精品色综合| 成人午夜一级二级三级| 日本亚洲色大成网站www久久| 日韩国产精品一区二区| 国产精品视频第一区| 蜜桃麻豆av在线| 成人高清av| 国产亚洲美州欧州综合国| 国产999精品久久久久久| 成人在线国产|