本人最近新学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. canvas实现“探照灯”共能

    简单的样式: body{ margin: 0; padding: 0;}#canvas{ display: block; position: relative; margin: auto;} 创建绘图 ...

  2. CentOS下yum安装wine

    Linux下安装wine可以从源码编译安装,但一般都觉得麻烦,所以尽量利用yum进行安装,解决很多包的依赖关系. 首先安装一个epel rpm -ivh /http://dl.fedoraprojec ...

  3. C#学习笔记1:正则表达式和数据库连接

    1.using System.Text.RegularExpressions; 只有导入该命名空间,才能引入Regex对象,IsMatch是Regex中的一个方法,作用是来判断(输入)内容是否满足正则 ...

  4. AndroidStudio学习记录

    AndroidStudio学习记录 1. 插件的使用. plugins.jetbrains.com插件网站. 2. 目录介绍: 1.Studio中有Project和Module的概念,前面说到Stud ...

  5. iOS RunTime的简单使用

    1.根据指定规则根据runtime进行页面选择跳转 背景:要根据后台返回的数据 进行选择要跳转到哪一个ViewController // 这个规则肯定事先跟服务端沟通好,跳转对应的界面需要对应的参数 ...

  6. 多个UITableView横向切换的简单实现(有点类似网易新闻)

    实现多列表切换,位置监控,置顶等功能. 方法一: 创建一个TableView,在切换的时候请求各类目需要的数据,然后刷新列表,通过动画模拟出滑动效果. #import <UIKit/UIKit. ...

  7. SpringInAction读书笔记--第2章装配Bean

    实现一个业务需要多个组件相互协作,创建组件之间关联关系的传统方法通常会导致结构复杂的代码,这些代码很难被复用和单元测试.在Spring中,对象不需要自己寻找或创建与其所关联的其它对象,Spring容器 ...

  8. Windows下lex 与 yacc的使用

     Windows下lex 与 yacc的使用 首先 下载下载flex和bison.网址是http://pan.baidu.com/s/1dDlfiW5 选择下载就好了,下载后解压到你电脑中的任一盘中. ...

  9. 09_httpclient测试SOAP协议

    [工程截图]注意:无需使用Wsimport生成客户端代码 [HttpClient.java] import java.io.ByteArrayOutputStream; import java.io. ...

  10. 学习笔记---C++虚函数,纯虚函数

    1 .虚函数 假设people是man的父类,people类和man类都定义了实函数walk() people* p = new man(); p->walk(); 这里P执行的是people类 ...