知识点不多

一:普通操作 

# 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之读写文本数据的更多相关文章

  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. opengl 单缓冲与双缓冲

    1.说明 GLUT_SINGLE  指定单缓存窗口 GLUT_DOUBLE  指定双缓存窗口 应用程序使用单缓冲绘图时可能会存在图像闪烁的问题. 这是因为生成的图像不是一下子被绘制出来的,而是按照从左 ...

  2. Qt 鼠标悬浮按钮上出现浮窗效果

    操作: 鼠标hover于Btn(or other widget),在指定位置显示想要的widget(或其他控件窗口) 方法:重载以下几个api void paintEvent(QPaintEvent ...

  3. Python3解leetcode N-ary Tree Level Order Traversal

    问题描述: Given an n-ary tree, return the level order traversal of its nodes' values. (ie, from left to ...

  4. php strlen()函数 语法

    php strlen()函数 语法 作用:返回字符串的长度.大理石平台价格 语法:strlen(string) 参数: 参数 描述 string 必需.规定要检查的字符串.     说明:返回字符串的 ...

  5. 20180910-Java 文档注释

    Java 文档注释 Java只是三种注释方式.前两种分别是// 和/* */,第三种被称作说明注释,它以/** 开始,以 */结束. // /* */ /** */ 说明注释允许你在程序中嵌入关于程序 ...

  6. 576 C

    C. MP3 爆ll == #include<bits/stdc++.h> using namespace std; typedef long long ll; #define P pai ...

  7. 网络编程之TCP协议与UDP协议

    了解网络就要了解一些基本的协议今天主要跟大家分享一些关于TCP 协议UDP协议的相关知识 首先介绍一下TCP协议 TCP(Transmission Cintrol Protocol)可靠的.面向连接的 ...

  8. Note-Git:Git 笔记

    ylbtech-Note-Git:Git 笔记 1.返回顶部 ·  Git 分支管理: 主干/master.热修正/hotfix.预生产/release.开发develop.个人1(个人.小团队)/f ...

  9. docker 保存镜像 加载镜像

    1.保存镜像 docker save -o 保存的文件名  来源镜像 2.加载镜像 docker load -i 保存的文件名

  10. pillow模块快速学习

    一.pillow的简单使用 1.安装 方式一: 如果配置了python中的script路径为环境变量,直接cmd中执行如下命令: pip3 install pillow 方式二: 通过编译器环境,如p ...