本人最近新学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()最方便:

python 读写文本文件的更多相关文章

  1. 通过读写文本文件小结“关于python处理中文编码的问题”

    一.引言 无论学习什么程序语言,字符串这种数据类型总是着有非常重要.然而最近在学习python这门语言,想要显示中文,总是出现各种乱码.于是在网上查了很多资料,各说纷纭,我也尝试了许多的方法,有时候可 ...

  2. Python中文本文件读写操作的编码问题

    Python中文本文件读写的编码问题 编码(encode): 我们输入的任何字符想要以文件(如.txt)的形式保存在计算机的硬盘上, 必须先经按照一定的规则编成计算机认识的二进制后,才能存在电脑硬盘上 ...

  3. Python读写文件

    Python读写文件1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('t ...

  4. python 读写、创建 文件

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...

  5. [转]用Python读写Excel文件

    [转]用Python读写Excel文件   转自:http://www.gocalf.com/blog/python-read-write-excel.html#xlrd-xlwt 虽然天天跟数据打交 ...

  6. python 读写、创建 文件的方法(必看)

    python 读写.创建 文件的方法(必看) 更新时间:2016年09月12日 10:26:41 投稿:jingxian 我要评论下面小编就为大家带来一篇python 读写.创建 文件的方法(必看). ...

  7. Python读写操作Excel模块_xlrd_xlwt_xlutils

    Python 读写操作Excel -- 安装第三方库(xlrd.xlwt.xlutils.openpyxl) 如果仅仅是要以表单形式保存数据,可以借助 CSV 格式(一种以逗号分隔的表格数据格式)进行 ...

  8. Python 读写文件 小应用:生成随机的测验试卷文件

    去年学习了python的读写文件部分,了解了python读写的常用模块os.shelve,今天准备把课后作业试着自己做一下 目标:1)生成35份试卷.每个试卷有50道选择题 2)为了防止有学生作弊,需 ...

  9. python读写、创建文件、文件夹等等

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...

随机推荐

  1. debian 颜色设置

    root@debian:/# vi /root/.bashrc #export PS1='\h:\w\$ 'export PS1='\[\033[1;32;40m\]\u@\h:\w\$ \[\033 ...

  2. 为Debain &&Centos安装dig

    Debain&Ubuntu sudo apt-get install dnsutils Fdeoar&Centos yum install bind-utils

  3. INSTALLING QUARTUS II V.13.1 64 BIT ON RHEL/CENTOS 6 64 BIT

    http://www.digitalsolutionslab.com/installing-quartus-ii-v-13-1-64-bit-on-rhelcentos-6-64-bit/ I hav ...

  4. fiddlercore 抓包获取cookie的方法

    public partial class form1 : Form { public form1() { string cookies = ""; InitializeCompon ...

  5. wsdl 关于nillable和minOccurs 在.NET和java中的不同

    术语约定文章中会反复出现[值类型].[包装类型].[普通引用类型].[元素节点]和[元素取值]的表述1> [值类型]指的是java和.NET中的基本数据类型,如:int:2> [包装类型] ...

  6. 接口和抽象类:Interface、abstract _【转】

    一.接口 接口是C#中很常见的工具,概念什么的就不说了,这里讲几个值得注意的小地方: 1.接口内部只能有函数.属性和事件的声明: interface IParent { void Show(); st ...

  7. spring3.2.0与mybatis3.2.7整合出错--Failed to read candidate component class--nested exception is java.lang.IllegalArgumentException

    错误信息如下: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate com ...

  8. Linux命令行程序和内建指令

    摘录百度分类 文件系统 cat cd chmod chown chgrp cksum cmp cp du df fsck fuser ln ls lsattr lsof mkdir mount mv ...

  9. IOS 高级开发 KVC(一)

    熟练使用KVC 可以再开发过程中可以给我们带来巨大的好处,尤其是在json 转模型的时候,KVC让程序员摆脱了繁琐无营养的代码堆积.减少代码量就是减少出错的概率.KVC 用起来很灵活,这种灵活的基础是 ...

  10. 暑假集训(2)第六弹 ----- Frosh Week(UVA11858)

    H - Frosh Week Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     ...