# encoding:utf-8 # 文件讀取操作 fp=open("E:\\file.txt","r",encoding="utf-8" ) data_read=fp.read()#一次性全部讀完 fp.seek(0,0)#游標移動到第一行,繼續讀,否則讀取到的是空 data_readlines=fp.readlines() fp.close() print(data_readlines) print(data_read)
# 練習:統計文件中一行存在test的行數 # 注:文件讀取的時候,行的末尾包含回車換行符號\n # 如果文件很大用readlines讀取,小文件直接用read讀取,read讀取的是整個文件內容,readlines結果是list count=0 fp=open("e:\\file.txt","r",encoding="utf-8") lines=fp.readlines() for i in lines: if "test" in i: print(i) count+=1 print(count)
# read() readlines() readline()的區別 # read()—當成一個字符串讀出 # readlines()readlines返回的是列表 # readline()一行一行讀文件 # 如果文件很大,用read()內存不夠(如運維日志幾十G) # 用readline來讀超大文件 #原則:內存在電腦中是個稀缺的資源,如果你占用大量內存,程序肯定不是最優的,小文件:read、readlines速度更快些 模式 w+:先清空所有文件內容,然后寫入,然后你才可以讀取你寫入的內容 r+:不清空內容,可以同時讀和寫入內容。 寫入文件的最開始 a+:追加寫,所有寫入的內容都在文件的最后 # a+ fp=open("e:\\file.txt","a",encoding="utf-8") fp.write("hello python") fp.close() fp=open("e:\\file.txt","r",encoding="utf-8") data=fp.read() fp.close() print(data) w+ #此時不需要關閉文件,w+ 可讀可寫(清空再寫),文件不存在就創建,r+可讀可寫不存在報錯 fp=open("e:\\file.txt","w+",encoding="utf-8") fp.write("hello python") fp.seek(0,0) data=fp.read() fp.close() print(data) #此時不需要關閉文件,a+ 可讀可寫(末尾追加再寫),文件不存在就創建,r+可讀可寫不存在報錯 fp=open("e:\\file.txt","a+",encoding="utf-8") fp.write("\nhello python1")#\n用來換行 fp.seek(0,0) data=fp.read() fp.close() print(data) # 關於open()的mode參數: # 'r':讀 # 'w':寫 # 'a':追加 # 'r+' == r+w(可讀可寫,文件若不存在就報錯(IOError)) # 'w+' == w+r(可讀可寫,文件若不存在就創建) # 'a+' ==a+r(可追加可寫,文件若不存在就創建) # 對應的,如果是二進制文件,就都加一個b就好啦: # 'rb' 'wb' 'ab' 'rb+' 'wb+' 'ab+' seek(offset,whence) seek() offset:坐標 正數表示從前向后 負數表示從后向前 0表示 最開始的游標 whence:0,1,2 0表示從文件最開始位置,0,0 1:表示從當前位置開始,基於當前的相對位置,來重置坐標。 10 seek(5,1) 10-->5,現在的坐標是15 2:表示從文件的末尾開始,做相對位置,來重置坐標 seek(-5,2)-->末尾向前數5個字符。 注意;:1和2使用基於rb模式 注意:這個文件指針的改變只是作用於'r',對'w'和'a'不會起作用,如果是'w', 那么write()永遠都是從開頭寫(會覆蓋后面對應位置的內容),是'a'的話write()就永遠都是從最后開始追加。 fp=open("e:\\file.txt","rb") data=fp.readlines() print(fp.tell()) fp.seek(-8,1) data1=fp.readlines() fp.close() print("data:",data) print("data1:",data1)