Python之读写文本数据
知识点不多
一:普通操作
- # rt 模式的 open() 函数读取文本文件
- # wt 模式的 open() 函数清除覆盖掉原文件,write新文件
- # at 模式的 open() 函数添加write新文件
- with open("../../testData","rt",encoding="utf-8") as f :
- for line in f :
- print(line)
- # 写操作默认使用系统编码,可以通过调用 sys.getdefaultencoding() 来得到,也以通过传递一个可选的 encoding 参数给open()函数,几个常见的编码是ascii, latin-1, utf-8和utf-16
- # 关于换行符的识别问题:在Unix和Windows中是不一样的(分别是 \n 和 \r\n )。 默认情况下,Python会以统一模式处理换行,识别普通换行符并将其转换为单个 \n 字符
- # 如果你不希望这种默认的处理方式,可以给 open() 函数传入参数 newline=''
- f =open('somefile.txt', 'rt', newline='')
- # 最后一个问题就是文本文件中可能出现的编码错误
- # 如果修改了编码方式之后,编码错误还是存在的话,你可以给 open() 函数传递一个可选的 errors 参数来处理这些错误。
- m = open('sample.txt', 'rt', encoding='ascii', errors='replace')
- # 如果你经常使用 errors 参数来处理编码错误,也是不好的。
- # 原则是确保你总是使用的是正确编码。当模棱两可的时候,就使用默认的设置(通常都是UTF-8)。
- 二:打印输出至文件中
- with open('../../testData', 'at') as f:
- print('Hello python!', file=f)
- # 使用其他分隔符或行终止符打印
- # 使用 print() 函数输出数据,但是想改变默认的分隔符或者行尾符,使用sep end
- print("hello","cool","zzy",sep="***",end="!") # hello***cool***zzy!
- #使用 str.join()
- print("***".join(("hello","cool","zzy"))) # hello***cool***zzy
- # 对比
- row = ("hello","cool","zzy")
- print(*row,sep="***") # hello***cool***zzy
- 三:读写字节数据
- # 读写二进制文件,比如图片,声音文件,使用模式为 rb 或 wb 的 open() 函数
- # 在读取二进制数据的时候,字节字符串和文本字符串的语义差异可能会导致一个潜在的陷阱:索引和迭代动作返回的是字节的值而不是字节字符串
- a='Hello World'
- print(a[0]) # H
- b = b'Hello World' # Byte string
- print(b[0]) # 72 索引和迭代动作返回的是字节的值而不是字节字符串
- # 如果你想从二进制模式的文件中读取或写入文本数据,必须确保要进行解码和编码操作
- # 解码
- with open("../../testDta","rb") as f :
- data=f.read(16)
- text=data.decode("utf-8")
- # 编码
- with open("../../testDta","wb") as d :
- text="hello"
- f.write(text.encode("utf-8"))
- 四:文件不存在才能写入
- 一个替代方案是先测试这个文件是否存在,像下面这样:
- import os
- if not os.path.exists("../../testData"):
- with open("../../testData", "wt") as f:
- f.write("")
- else:
- print('File already exists!')
- 最优解决
- # 文件中写入数据,不允许覆盖已存在的数据,可以用"xt",这个参数会判断文件是否已经存在(不管是否有内容,也不管内容是怎样的),如果有会报错FileExistsError:
- with open("../../testData","wt") as f :
- f.write("")
- with open("../../testData","xt") as f :
- f.write("你好") # FileExistsError: [Errno 17] File exists: '../../testData'
- 五:读压缩文件
- import gzip
- with gzip.open('somefile.gz', 'rt') as f:
- text = f.read()
- # bz2 compression
- import bz2
- with bz2.open('somefile.bz2', 'rt') as f:
- text = f.read()
- # 写入压缩数据
- import gzip
- with gzip.open('somefile.gz', 'wt') as f:
- f.write(text)
- # bz2 compression
- import bz2
- with bz2.open('somefile.bz2', 'wt') as f:
- f.write(text)
- 读写压缩数据 如果你不指定模式,那么默认的就是二进制模式,如果这时候程序想要接受的是文本数据,那么就会出错。
gzip.open() 和 bz2.open() 接受跟内置的 open() 函数一样的参数, 包括 encoding,errors,newline 等等。
可以使用 compresslevel 这个可选的关键字参数来指定一个压缩级别,默认的等级是9,也是最高的压缩等级。等级越低性能越好,但是数据压缩程度也越低。
- with gzip.open('somefile.gz', 'wt', compresslevel=5) as f:
- f.write(text)
- 六:固定大小记录的文件迭代
- from functools import partial
- RECORD_SIZE= 32
- # somefile.data是二进制文件
- with open('somefile.data', 'rb') as f:
- records = iter(partial(f.read, RECORD_SIZE), b'')
- for r in records:
- ...
Python之读写文本数据的更多相关文章
- 背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据
[源码下载] 背水一战 Windows 10 (89) - 文件系统: 读写文本数据, 读写二进制数据, 读写流数据 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 读写文本数 ...
- Python数据类型之“文本序列(Text Sequence)”
Python中的文本序列类型 Python中的文本数据由str对象或字符串进行处理. 1.字符串 字符串是Unicode码值的不可变序列.字符串字面量有多种形式: 单引号:'允许嵌入"双&q ...
- 【转】Python数据类型之“文本序列(Text Sequence)”
[转]Python数据类型之“文本序列(Text Sequence)” Python中的文本序列类型 Python中的文本数据由str对象或字符串进行处理. 1.字符串 字符串是Unicode码值的不 ...
- IO流-文本IO\读写二进制数据
文本IO 一.简述 OutputStreamWriter类使用选定的编码方式吧Unicode字符流转换为字节流,InputStreamReader类将包含字节的输入流转为可以产生Unicode字符的读 ...
- 10、NFC技术:读写NFC标签中的文本数据
代码实现过程如下: 读写NFC标签的纯文本数据.java import java.nio.charset.Charset; import java.util.Locale; import androi ...
- Python文本数据互相转换(pandas and win32com)
(工作之后,就让自己的身心都去休息吧) 今天介绍一下文本数据的提取和转换,这里主要实例的转换为excel文件(.xlsx)转换world文件(.doc/docx),同时需要使用win32api,同py ...
- [Python] 糗事百科文本数据的抓取
[Python] 糗事百科文本数据的抓取 源码 https://github.com/YouXianMing/QiuShiBaiKeText import sqlite3 import time im ...
- Python数据分析之Pandas读写外部数据文件
1 引言 数据分析.数据挖掘.可视化是Python的众多强项之一,但无论是这几项中的哪一项都必须以数据作为基础,数据通常都存储在外部文件中,例如txt.csv.excel.数据库.本篇中,我们来捋一捋 ...
- python处理文本数据
处理文本数据,主要是通过Seris的str访问.遇到NaN时不做任何处理,保留结果为NaN,遇到数字全部处理为NaN. str是Seris的方法,DataFrame不能直接使用,但是通过索引选择Dat ...
随机推荐
- lsattr 查看文件扩展属性
1. 命令功能 lsattr查看 是否有chattr设置的权限. 2. 使用范例 [root@localhost data]# lsattr resolv.conf -----a-------e- r ...
- [HNOI2009]有趣的数列(卡塔兰数,线性筛)
[HNOI2009]有趣的数列 题目描述 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1< ...
- [python 学习] 编码
一.源文件编码(encoding: utf-8) 1. python 2.x 默认按ascii编码读取源文件,源码中出现了ascii不能表示的字符 "的",所以报错(3.x版本不报 ...
- layer-框架使用修改部分
关于框架中js调子方法出错的处理 top.layer.open({ id: options.id, type: 2, shade: options.shade, title: options.titl ...
- Linux下安装Python,以及环境变量的配置
1.安装环境 centos7 + vmware + xshell 2.安装Python3 2.1下载Python资源包 网址:https://www.python.org/downloads/re ...
- Android SDK说明(图)
- Java泛型与集合笔记
第一章 Java的泛型为了兼容性和防止代码爆炸,在编译成字节碼时会进行类型擦除,编译器自动添加代码做类型转换(用到List<Integer>的地方用Integer来做转换),自动做装箱拆箱 ...
- Jmeter的JDBC请求执行多条SQL语句
注:有mysqlconnector/j 3.1.1以上版本才支持执行多条sql语句 1. 下载jdbc驱动为了连接Mysql数据库,还需要有个jdbc驱动:mysql-connector-ja ...
- web高拍仪图片上传
公司引进高拍仪,想拍完照片点上传按钮直接上传图片.高拍仪接口能提供照片的本地路径,现在的问题是不用file控件选择,只有路径,不知道如何上传到服务器,求解决方案. 方法: 使用泽优Web图片上传控件( ...
- MySQL体系结构概览
MySQL体系结构 InnoDB体系结构 MySQL实例有一组后台线程.一些内存块和若干服务线程组成 在默认情况下,MySQL有7组后台线程,分别为1个主线程,4组IO线程,1个锁线程,1个错误监控线 ...