python 文件处理软件_Python —— 文件处理
1、文件操作分為讀、寫、修改
兩種方式讀寫文件:
方法1:
1 f = open(file = '路徑', mode = 'r', encoding = 'utf-8')2 data =f.read()3 f.close()
方法2:
1 with open(‘路徑’,‘r’,encoding = 'utf-8') as f:2 f.read()
2、以什么方式存的文件,就要用什么方式打開,必須指定,否則會出現編碼錯誤,所以在open里面要寫上encoding
3、路徑
相對路徑
絕對路徑
4、二進制模式
在不知道文件使用什么編碼的情況下,要打開文件,可以使用二進制模式打開:
1 f = open(file = '路徑', mode = 'rb')2 data = f.read() #f.read(1) 讀1個字符
3 print(data)4 f.close()
5、智能檢測編碼工具:
要判斷文件到底使用哪種方式編碼的(一般就是utf-8、Unicode、gbk)
需要使用第三方模塊:?chardet,?根據編碼的規律(不同編碼的字節)
#-*- coding:utf -8-*-
importchardet
f= open('hello', 'rb')
data=f.read()
f.close()
result=chardet.detect(data)print(result)
out:
{'encoding': 'IBM855', 'confidence': 0.20479192628309825, 'language': 'Russian'}
安裝方法:pip
打開終端,輸入pip install?chardet? (要在pip已經成功安裝在電腦上才行)
編碼和解碼:
編碼?encode? 使用一個編碼方式進行編碼或者打開
unicode ----> encode?編碼 -----> gbk\ utf-8? 當內存里的數據要存儲或者傳輸的時候用utf-8?保存
解碼?decode
utf- 8? ----> decode?解碼 ---->? unicode? ?當硬盤的數據加載到內存中讀取的時候,使用Unicode?讀取
6、寫模式操作文件 w\ wb
如果文件很大,在不占內存的情況下,處理完文件,可以進行邊讀邊處理,把整個文件每次讀一點,循環讀完整個文件
# 循環語句讀文件
f = open('file','r')for line inf:print(line) # print會自動換行,所以打印出來會空一行打印
print?具有打印完后,自動換行的功能
寫文件:
f = open('younggirl', 'w', encoding='utf-8') # 使用w ,會自動創建這個文件#文件編碼是utf-8 ,加載到內存后,是自動轉換成Unicode 讀取
f.write('today is monday')
f.write('tomorrow is tuesday') # write 是不會自己換行的
f.close()
創建一個二進制的文件,寫內容的時候?要標志編碼類型,才能順利寫入:
7、追加模式?a \ ab :把文件追加到文件尾部:
1 f = open('file', mode = 'a', encoding = 'gbk')
8、文件讀、寫混合模式(r+):先讀后寫
f = open(file='hello1', mode='r+', encoding='gbk')print(f1.read())
f.write('\nahhahah')
f.write('\n111111')print(f.read())
f1.close()
只會打印第一個print,因為先讀 后寫,寫完之后,文件中的光標已經在最后一個,再讀的話,已經沒有內容可讀了
9、文件寫、讀模式(w+):先清空,后寫入內容
10、文件處理的其他功能:
fileno:
返回文件句柄在內核中的索引值,以后做IO多路復用時可以用到
flush:
把文件從內存buffer里強制刷新到硬盤
在內存里寫入文件的時候,沒有真正的寫到文件中,只有close,才會存入
當內存的buffer滿了之后,才會自動刷到硬盤
如果要強制刷入硬盤,可以中間用flush
readable:
判斷是否可讀
在Linux中,一切皆文件(連一個安裝包、視頻、終端都是文件)所以要判斷文件是否可讀才能正常讀取
當文件是w模式的時候,是不能讀取文件的
readline:
只讀一行內容,遇到\n 、 \r?結束讀取
\r前面的字符不打印,后面的才打印
\n打印前面的字符
seek:
把操作文件的光標移動到指定位置
f.seek(10):?長度是按照字節算的,但是不同的字符編碼所占用的字節長度是不一樣的,當不知道字符編碼的時候,錯用seek,會出現亂碼
f = open('blue', 'r+', encoding='utf-8')
f.seek(15)
f.write('aaa')
f.close()
seekable:判斷是否可移動
tell:
讀取當前光標的位置(字節的長度)
truncate:
按指定長度截斷文件,從當前位置往后面刪除
1 f = open('blue', 'r+', encoding='utf-8')2 f.truncate(20)3 f.close()
11、修改文件
使用seek,把光標移動到文件的中間
f = open('blue', 'r+', encoding='utf-8')
f.seek(6)
f.write('用seek插入字符')
f.close()
以上問題: 把有一些內容被替換掉了,沒有直接插入,
還有可能會出現亂碼(輸入字節3個的話,剩下的多了一個出來,就亂碼了) 這個和存儲原理導致的
解決方法:
方法1:?占硬盤方式的文件修改代碼
要邊讀邊修改,寫到新的文件里
f = 'blue'f_new= '{}.new'.format(f)
old_str= 'how'new_str= 'how222.how'file= open(f, 'r', encoding='utf-8')
file_new= open(f_new, 'w', encoding='utf-8')for line infile:if old_str inline:
new_line=line.replace(old_str, new_str)else:
new_line=line
file_new.write(new_line)
file.close()
file_new.close()
方法2:若想覆蓋原先的文件
上面的代碼是生成了一個新的文件,如果想要覆蓋,需要使用第三方模塊
importos#以下代碼可上面一樣
f = 'blue'f_new = '{}.new'.format(f)
old_str = 'how'new_str = 'how222.how'file = open(f, 'r', encoding='utf-8')
file_new = open(f_new, 'w', encoding='utf-8')
for line infile:
if old_str inline:
new_line =line.replace(old_str, new_str)
else:
new_line =line
file_new.write(new_line)
file.close()
file_new.close()
os.rename(file_new, file)
# 新文件名字改成原先的名字
# Windows 的方法有點不一樣 os.replace
# 幫助文檔說明replace會覆蓋原文件
總結
以上是生活随笔為你收集整理的python 文件处理软件_Python —— 文件处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如流是什么软件
- 下一篇: 小米mix2怎么开空调(Xiaomi)