python 讀寫文字檔案

2021-09-08 22:33:15 字數 4000 閱讀 2295

本人最近新學python ,用到文字檔案的讀取,經過一番研究,從網上查詢資料,經過測試,總結了一下讀取文字檔案的方法.

a、f=open('filename', 'r')

content=f.read().decode('utf-8')

b、f=codecs.open(***, encoding='utf-8')

content=f.read()

2、讀取utf8格式的文字檔案

# -*- coding: utf8 -*-

import os

import sys

import os.path

import codecs

'''讀取文字utf8格式的文字檔案,不需要設定特殊的編碼方式,安裝預設就行'''

def readutf8txtfile1(strfilename):

'''之所以加這樣一句,是因為如果檔名包含中文路徑,導致亂碼'''

filename = unicode(strfilename, "utf8")

if os.path.isfile(filename):

filehandler = open(filename,'r')

outstr = filehandler.read()

filehandler.close()

return outstr

3、讀取ansi格式的文字檔案

'''讀取ansi格式的文字檔案,不需要設定特殊的編碼方式,安裝預設就行'''

def readansitxtfile(strfilename):

'''之所以加這樣一句,是因為如果檔名包含中文路徑,導致亂碼'''

filename = unicode(strfilename, "utf8")

if os.path.isfile(filename):

filehandler = codecs.open(filename,'r','gbk')

outstr = filehandler.read()

filehandler.close()

return outstr

4、讀取文字unicode格式的文字檔案

'''讀取文字unicode格式的文字檔案,不需要設定特殊的編碼方式,安裝預設就行'''

def readunicodetxtfile(strfilename):

'''之所以加這樣一句,是因為如果檔名包含中文路徑,導致亂碼'''

filename = unicode(strfilename, "utf8")

if os.path.isfile(filename):

filehandler = codecs.open(filename,'r','utf-16')

outstr = filehandler.read()

filehandler.close()

return outstr

5、讀取utf-8編碼檔案(有bom)格式的文字檔案

'''讀取utf-8編碼檔案(有bom)格式的文字檔案,不需要設定特殊的編碼方式,安裝預設就行'''

def readutf8bomtxtfile(strfilename):

'''之所以加這樣一句,是因為如果檔名包含中文路徑,導致亂碼'''

filename = unicode(strfilename, "utf8")

if os.path.isfile(filename):

filehandler = codecs.open(filename,'r')

outstr = filehandler.read()      

filehandler.close()

if outstr[:3] == codecs.bom_utf8

outstr = outstr[3:].decode("utf8")

return outstr

6、綜合以上幾種方法可以可以看到,首先要獲取檔案的編碼方式,然後再開啟檔案,這樣可以集成為乙個方法:

# -*- coding: utf8 -*-

import os

import sys

import os.path

import codecs

import chardet

'''讀取文字檔案,注意檔案的編碼方式ansi,unicode,unicode big endian,utf-8,

首先要讀取檔案的編碼方式,然後在用指定的編碼方式來讀取檔案

'''def readtxtfile(strfilename):

'''之所以加這樣一句,是因為如果檔名包含中文路徑,導致亂碼'''

filename = unicode(strfilename, "utf8")

filehandler = open(filename,'r')

outstr = filehandler.read()

filehandler.close()

#讀取編碼方式

charset = chardet.detect(outstr)

filehandler = codecs.open(filename,'r',charset['encoding'])

outstr = filehandler.read()

filehandler.close()

return outstr

'''讀取文字檔案,注意檔案的編碼方式ansi,unicode,unicode big endian,utf-8,

首先要讀取檔案的編碼方式,然後在用指定的編碼方式來讀取檔案

'''def readtxtfile(strfilename):

filename = unicode(strfilename, "utf8")

with open(filename, 'r') as filehandler:

outstr = filehandler.read()

#讀取編碼方式

charset = chardet.detect(outstr)

with codecs.open(filename,'r',charset['encoding']) as filehandler:

outstr = filehandler.read()

return outstr

python引入了with語句來自動幫我們呼叫close()方法,和try ... finally是一樣的,但是**更佳簡潔,並且不必呼叫close()方法。

7、寫文字檔案

'''寫文字檔案,如果檔案不存在,則建立檔案,如果存在,則以追加方式寫入strconent'''

def writefile(strfilename,strcontent):

'''之所以加這樣一句,是因為如果檔名包含中文路徑,導致亂碼'''

filename = unicode(strfilename, "utf8")

writestyle = 'w'

if os.path.isfile(strfilename):

writestyle = 'a'

filehandler = open(filename,'a')

filehandler.write(strcontent)

filehandler.close()

開啟檔案呼叫read()會一次性讀取檔案的全部內容,如果檔案有10g,記憶體就爆了,所以,要保險起見,可以反覆呼叫read(size)方法,每次最多讀取size個位元組的內容。另外,呼叫readline()可以每次讀取一行內容,呼叫readlines()一次讀取所有內容並按行返回list。因此,要根據需要決定怎麼呼叫。

如果檔案很小,read()一次性讀取最方便;如果不能確定檔案大小,反覆呼叫read(size)比較保險;如果是配置檔案,呼叫readlines()最方便:

Python 讀寫文字檔案

def readfile filename,mode r 讀取檔案內容 filename 檔名 return string bin 若檔案不存在,則返回空字串 import os if not os.path.exists filename return fp open filename,mode,...

讀寫文字檔案

讀文字 function readtext filename string string vars string alltext string f textfile begin assignfile f,filename 將c myfile.txt檔案與f變數建立連線,後面可以使用f變數對檔案進行操...

Python 逐行讀寫文字檔案

filereadobj open input.txt filewriteobj open output.txt w filelinetext filereadobj.readline while filelinetext string filelinetext filewriteobj.write ...