python 写文本文件_python 读写文本文件

本文详细介绍了Python中读取不同编码格式的文本文件的方法,包括UTF-8、ANSI和Unicode等。同时,还提供了一个综合方法,通过检测文件编码自动读取。此外,还讲解了如何写入文本文件,支持文件不存在时创建及已存在时追加内容。最后,提到了根据文件大小选择合适的读取策略。
摘要由CSDN通过智能技术生成

本人最近新学python ,用到文本文件的读取,经过一番研究,从网上查找资料,经过测试,总结了一下读取文本文件的方法.

1、在读取文本文件的时无非有两种方法:

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

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

b、f=codecs.open(XXX, 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()最方便:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值