本人最近新学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. Fragment+Activity传递数据

    自己经常使用的知识点,每次到要用的时候都还要再查一次才能懂得使用,终于体会到总结的必要性了. Activity传递数据给Fragment Bundle bundle_fragment=new Bund ...

  2. 【转】SQL Server 2012 配置AlwaysOn(三)

    转载自:http://www.cnblogs.com/lyhabc/p/4682986.html 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http:/ ...

  3. css-实现元素垂直居中对齐

    css-实现元素/元素内容,垂直居中对齐 一.单行内容的垂直居中(line-height:行高方法) 只考虑单行是最简单的,无论是否给容器固定高度,只要给容器设置 line-height 和 heig ...

  4. PHP之会话控制小结

    会话控制是一种跟踪用户的通信方式,使用会话控制主要基于以下几点:由于http协议的无状态性,使得不能通过协议来建立两次请求之间的关联:对于通常的页面之间的数据传递方式get和post而言,主要处理参数 ...

  5. Visual Studio.NET、asp.net和C#间的关系是怎样的?

    asp.net是一种技术,要实现这种技术,就得有底层的实现技术编程语言,这个语言就是C#,(只是绝大多数首选C#),要想用C#实现asp.net技术,就得有编程的工具软件,这个软件我一直用visual ...

  6. C#学习笔记12:枚举、结构、数组基础学习

    枚举:public enum MyEnum { 值1, 值2, 值3 } Public enum Season { 春, 夏, 秋, 冬 } 枚举的作用:规范用户的输入,枚举可以转换为int类型,可以 ...

  7. Switch的表达式的要求

    在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样),在java1.7后支持了对string的判断.

  8. CocoaPods的使用详解

    CocoaPods是什么 当我们开发 iOS 项目时候,会经常使用到第三方类库,并且会使用很多.大家的做法基本上都是到 GitHub 上下载一个一个的类库,然后导入到工程中,并且引入各种的类库,做各种 ...

  9. 【html】【21】高级篇--搜索框

    下载: http://www.xwcms.net/js/bddm/25368.html 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...

  10. hdu 5056 Boring count

    贪心算法.需要计算分别以每个字母结尾的且每个字母出现的次数不超过k的字符串,我们设定一个初始位置s,然后用游标i从头到尾遍历字符串,使用map记录期间各个字母出现的次数,如果以s开头i结尾的字符串满足 ...