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 ...
随机推荐
- Codeforces Round #425 (Div. 2) - A
题目链接:http://codeforces.com/contest/832/problem/A 题意:有n个棍子,两个人轮流取这些棍子,每个人每次只能去恰好k个棍子(不足k个则不能取),问先手取的棍 ...
- head 显示文件头部内容
1. 命令功能 head 默认显示文件前10行内容. 2.语法格式 head option file 参数说明 参数 参数说明 -n 指定显示行数 -c 指定显示的字节数 -v 总是显示文件名的文件头 ...
- (转)nginx+redis实现接入层高性能缓存技术
转自:https://blog.csdn.net/phil_code/article/details/79154271 1. OpenRestyOpenResty是一个基于 Nginx与 Lua的高性 ...
- 查看Linux系统所对应的版本
#cat /etc/issue 在CentOS下执行显示为:CentOS release 5.7 (Final)Kernel \r on an \m 或在Ubuntu下显示为:Ubuntu 11.04 ...
- flask之url_for函数
一:url_for函数 干什么的?传入函数名,得到函数的路由地址(访问视图函数的地址) from flask import Flask from flask import url_for app = ...
- Cobaltstrike系列教程(二)-Listner与Payload生成 heatlevel
0x000-前文 Cobaltstrike系列教程(一)简介与安装 0x001-Listner(监听器)介绍 ①Cobaltstrike listner简介 可能有一些小白并不理解什么叫做listne ...
- tensorflow函数介绍 (5)
1.tf.ConfigProto tf.ConfigProto一般用在创建session的时候,用来对session进行参数配置: with tf.Session(config=tf.ConfigPr ...
- Counter的数据统计功能
Counter是dict的子类,一般用于统计,默认排序是从大到小 from collections import Counter # 输入iterable对象即可 str_counter = Coun ...
- re模块的高级使用
主要有四个方法: search : 从字符串的任意位置开始检索,首次匹配即结束 findall : 全部匹配 sub : 将正则匹配结果进行替换 split : 根据正则匹配结果将字符串进行切分,然后 ...
- git怎样删除未监视的文件untracked files ?
git怎样删除未监视的文件untracked files 需要添加到.gitignore文件 # 删除 untracked files git clean -f # 连 untracked 的目录也一 ...