知识点不多

一:普通操作 

  1. # rt 模式的 open() 函数读取文本文件
  2. # wt 模式的 open() 函数清除覆盖掉原文件,write新文件
  3. # at 模式的 open() 函数添加write新文件
  4. with open("../../testData","rt",encoding="utf-8") as f :
  5. for line in f :
  6. print(line)
  7.  
  8. # 写操作默认使用系统编码,可以通过调用 sys.getdefaultencoding() 来得到,也以通过传递一个可选的 encoding 参数给open()函数,几个常见的编码是ascii, latin-1, utf-8和utf-16
  9. # 关于换行符的识别问题:在Unix和Windows中是不一样的(分别是 \n 和 \r\n )。 默认情况下,Python会以统一模式处理换行,识别普通换行符并将其转换为单个 \n 字符
  10. # 如果你不希望这种默认的处理方式,可以给 open() 函数传入参数 newline=''
  11. f =open('somefile.txt', 'rt', newline='')
  12.  
  13. # 最后一个问题就是文本文件中可能出现的编码错误
  14. # 如果修改了编码方式之后,编码错误还是存在的话,你可以给 open() 函数传递一个可选的 errors 参数来处理这些错误。
  15. m = open('sample.txt', 'rt', encoding='ascii', errors='replace')
  16.  
  17. # 如果你经常使用 errors 参数来处理编码错误,也是不好的。
  18. # 原则是确保你总是使用的是正确编码。当模棱两可的时候,就使用默认的设置(通常都是UTF-8)。
  1. 二:打印输出至文件中
  1. with open('../../testData', 'at') as f:
  2. print('Hello python!', file=f)
  3.  
  4. # 使用其他分隔符或行终止符打印
  5. # 使用 print() 函数输出数据,但是想改变默认的分隔符或者行尾符,使用sep end
  6. print("hello","cool","zzy",sep="***",end="!") # hello***cool***zzy!
  7.  
  8. #使用 str.join()
  9. print("***".join(("hello","cool","zzy"))) # hello***cool***zzy
  10.  
  11. # 对比
  12. row = ("hello","cool","zzy")
  13. print(*row,sep="***") # hello***cool***zzy
  1. 三:读写字节数据
  1. # 读写二进制文件,比如图片,声音文件,使用模式为 rb 或 wb 的 open() 函数
  2.  
  3. # 在读取二进制数据的时候,字节字符串和文本字符串的语义差异可能会导致一个潜在的陷阱:索引和迭代动作返回的是字节的值而不是字节字符串
  4. a='Hello World'
  5. print(a[0]) # H
  6.  
  7. b = b'Hello World' # Byte string
  8. print(b[0]) # 72 索引和迭代动作返回的是字节的值而不是字节字符串
  9.  
  10. # 如果你想从二进制模式的文件中读取或写入文本数据,必须确保要进行解码和编码操作
  11. # 解码
  12. with open("../../testDta","rb") as f :
  13. data=f.read(16)
  14. text=data.decode("utf-8")
  15.  
  16. # 编码
  17. with open("../../testDta","wb") as d :
  18. text="hello"
  19. f.write(text.encode("utf-8"))
  1. 四:文件不存在才能写入
  1. 一个替代方案是先测试这个文件是否存在,像下面这样:
  1. import os
  2. if not os.path.exists("../../testData"):
  3. with open("../../testData", "wt") as f:
  4. f.write("")
  5. else:
  6. print('File already exists!')
  1. 最优解决
  1. # 文件中写入数据,不允许覆盖已存在的数据,可以用"xt",这个参数会判断文件是否已经存在(不管是否有内容,也不管内容是怎样的),如果有会报错FileExistsError:
  2. with open("../../testData","wt") as f :
  3. f.write("")
  4. with open("../../testData","xt") as f :
  5. f.write("你好") # FileExistsError: [Errno 17] File exists: '../../testData'
  1. 五:读压缩文件
  1. import gzip
  2. with gzip.open('somefile.gz', 'rt') as f:
  3. text = f.read()
  4.  
  5. # bz2 compression
  6. import bz2
  7. with bz2.open('somefile.bz2', 'rt') as f:
  8. text = f.read()
  9.  
  10. # 写入压缩数据
  11. import gzip
  12. with gzip.open('somefile.gz', 'wt') as f:
  13. f.write(text)
  14.  
  15. # bz2 compression
  16. import bz2
  17. with bz2.open('somefile.bz2', 'wt') as f:
  18. f.write(text)
  1. 读写压缩数据 如果你不指定模式,那么默认的就是二进制模式,如果这时候程序想要接受的是文本数据,那么就会出错。
    gzip.open() bz2.open() 接受跟内置的 open() 函数一样的参数, 包括 encodingerrorsnewline 等等。
    可以使用 compresslevel 这个可选的关键字参数来指定一个压缩级别,默认的等级是9,也是最高的压缩等级。等级越低性能越好,但是数据压缩程度也越低。
  1. with gzip.open('somefile.gz', 'wt', compresslevel=5) as f:
  2. f.write(text)
  1. 六:固定大小记录的文件迭代
  1. from functools import partial
  2. RECORD_SIZE= 32
  3. # somefile.data是二进制文件
  4. with open('somefile.data', 'rb') as f:
  5. records = iter(partial(f.read, RECORD_SIZE), b'')
  6. for r in records:
  7. ...
  1.  
  1.  

Python之读写文本数据的更多相关文章

  1. 背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据

    [源码下载] 背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 读写文本数 ...

  2. Python数据类型之“文本序列(Text Sequence)”

    Python中的文本序列类型 Python中的文本数据由str对象或字符串进行处理. 1.字符串 字符串是Unicode码值的不可变序列.字符串字面量有多种形式: 单引号:'允许嵌入"双&q ...

  3. 【转】Python数据类型之“文本序列(Text Sequence)”

    [转]Python数据类型之“文本序列(Text Sequence)” Python中的文本序列类型 Python中的文本数据由str对象或字符串进行处理. 1.字符串 字符串是Unicode码值的不 ...

  4. IO流-文本IO\读写二进制数据

    文本IO 一.简述 OutputStreamWriter类使用选定的编码方式吧Unicode字符流转换为字节流,InputStreamReader类将包含字节的输入流转为可以产生Unicode字符的读 ...

  5. 10、NFC技术:读写NFC标签中的文本数据

    代码实现过程如下: 读写NFC标签的纯文本数据.java import java.nio.charset.Charset; import java.util.Locale; import androi ...

  6. Python文本数据互相转换(pandas and win32com)

    (工作之后,就让自己的身心都去休息吧) 今天介绍一下文本数据的提取和转换,这里主要实例的转换为excel文件(.xlsx)转换world文件(.doc/docx),同时需要使用win32api,同py ...

  7. [Python] 糗事百科文本数据的抓取

    [Python] 糗事百科文本数据的抓取 源码 https://github.com/YouXianMing/QiuShiBaiKeText import sqlite3 import time im ...

  8. Python数据分析之Pandas读写外部数据文件

    1 引言 数据分析.数据挖掘.可视化是Python的众多强项之一,但无论是这几项中的哪一项都必须以数据作为基础,数据通常都存储在外部文件中,例如txt.csv.excel.数据库.本篇中,我们来捋一捋 ...

  9. python处理文本数据

    处理文本数据,主要是通过Seris的str访问.遇到NaN时不做任何处理,保留结果为NaN,遇到数字全部处理为NaN. str是Seris的方法,DataFrame不能直接使用,但是通过索引选择Dat ...

随机推荐

  1. lsattr 查看文件扩展属性

    1. 命令功能 lsattr查看 是否有chattr设置的权限. 2. 使用范例 [root@localhost data]# lsattr resolv.conf -----a-------e- r ...

  2. [HNOI2009]有趣的数列(卡塔兰数,线性筛)

    [HNOI2009]有趣的数列 题目描述 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1< ...

  3. [python 学习] 编码

    一.源文件编码(encoding: utf-8) 1. python 2.x 默认按ascii编码读取源文件,源码中出现了ascii不能表示的字符 "的",所以报错(3.x版本不报 ...

  4. layer-框架使用修改部分

    关于框架中js调子方法出错的处理 top.layer.open({ id: options.id, type: 2, shade: options.shade, title: options.titl ...

  5. Linux下安装Python,以及环境变量的配置

    1.安装环境   centos7 + vmware + xshell 2.安装Python3 2.1下载Python资源包 网址:https://www.python.org/downloads/re ...

  6. Android SDK说明(图)

  7. Java泛型与集合笔记

    第一章 Java的泛型为了兼容性和防止代码爆炸,在编译成字节碼时会进行类型擦除,编译器自动添加代码做类型转换(用到List<Integer>的地方用Integer来做转换),自动做装箱拆箱 ...

  8. Jmeter的JDBC请求执行多条SQL语句

    注:有mysqlconnector/j 3.1.1以上版本才支持执行多条sql语句 1.     下载jdbc驱动为了连接Mysql数据库,还需要有个jdbc驱动:mysql-connector-ja ...

  9. web高拍仪图片上传

    公司引进高拍仪,想拍完照片点上传按钮直接上传图片.高拍仪接口能提供照片的本地路径,现在的问题是不用file控件选择,只有路径,不知道如何上传到服务器,求解决方案. 方法: 使用泽优Web图片上传控件( ...

  10. MySQL体系结构概览

    MySQL体系结构 InnoDB体系结构 MySQL实例有一组后台线程.一些内存块和若干服务线程组成 在默认情况下,MySQL有7组后台线程,分别为1个主线程,4组IO线程,1个锁线程,1个错误监控线 ...