python——文件处理
1.文件处理
f = open(file="file01.txt", mode="r", encoding="utf-8") #python3默认编码格式为utf-8
data = f.read()
print(data)
print(type(data)) # <class 'str'>
f.close()
如果报错
#UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcc in position 0: invalid continuation byte
说明编码不对。
按正常逻辑来讲,文件是以什么方式存的,就应该用什么方式去读取,比如以gb2312存的,就应该以gb2312去读。文件是以utf-8存的,就用utf-8的编码格式去读。
2.文件处理-二进制模式
文件在计算机中是以二进制存储的,我们可以不理会编码,直接以二进制的形式读取文件内容
f = open(file="file01.txt", mode="rb")
data = f.read()
print(data)
f.close()
以二进制方式读取,mode = "rb"
,得到的结果也是二进制。
在读取视频、图片等内容和网络传输的时候,会使用二进制方式读取。
#打印结果 b'\xef\xbb\xbf\xe7\x94\xb0\xe7\xbb\xb4\xe9\x80\x9a\t12001\t10\r\n\xe5\xbc\xa0\xe5\xae\xb6\xe9\x93\xad\t12002\t11\r\n\xe8\x88\x92\xe5\xa8\x85\t12003\t12\r\n\xe5\xad\x99\xe7\x8e\x89\xe5\x80\xa9\t12004\t13\r\n\xe5\xbc\xa0\xe8\xb6\x85\t12005\t14\r\n\xe7\x8e\x8b\xe4\xba\xac\t12006\t15\r\n\xe5\xbb\x96\xe6\x9e\x97\xe8\x8b\xb1\t12007\t16\r\n\xe5\xbe\x90\xe6\x99\x93\xe8\x8e\x89\t12008\t17\r\n\xe9\x87\x91\xe5\x98\x89\xe7\xa5\xba\t12009\t18\r\n\xe5\x8f\x8a\xe6\xa0\xbc\t12010\t19\r\n\xe4\xba\x8e\xe5\x87\xaf\xe9\x98\xb3\t12011\t20\r\n\xe6\x9d\x8e\xe4\xbf\x8a\xe7\xba\xa2\t12012\t21\r\n\xe5\x88\x98\xe5\x86\xac\t12013\t22\r\n'
3.文件处理-智能检测编码的工具
import chardet
f = open('file01.txt', mode="rb")
data = f.read()
print(chardet.detect(data))#打印结果:
#{'encoding': 'UTF-8-SIG', 'confidence': 1.0, 'language': ''}
#confidence,表示 encoding 为 UTF-8-SIG 的概率为 1.0
然后,当我们知道目标文件是什么格式后,data.decode("utf-8")
一下,就可以打印出我们需要的内容
4. 循环读取逐条读取文件
f = open('file01.txt', 'r', encoding='utf-8')
for line in f:print(line, end="") # end = "" 表示,打印的时候以什么结尾,此处可以去掉print默认的换行符 \n
f.close()
打印结果:
# 田维通 12001 10
# 张家铭 12002 11
# 舒娅 12003 12
# 孙玉倩 12004 13
# 张超 12005 14
# 王京 12006 15
# 廖林英 12007 16
# 徐晓莉 12008 17 ...
5.写文件
#以 gbk 格式创建一个文件,写入内容“将进酒”
f = open(file='file02.txt', mode='w', encoding='gbk')
f.write('将进酒')
f.close()
如果这个时候再写一遍,即
f = open(file='file02.txt', mode='w', encoding='gbk')
f.write('杯莫停')
f.close()
得到的结果是:将原来的 file02.txt 文件覆盖掉了
6.写文件——追加
写入内容追加的已有内容后面
f = open('file02.txt', 'ab') #mode 为 ab 或 a,表示追加
f.write('\n人生得意须尽欢'.encode('gbk'))
f.close()
7.文件处理-读写混合操作文件
f = open('file02.txt', 'r+', encoding='gbk')
data = f.read()
print("content:", data)
f.write("\n锄禾日当午")
f.write("\n汗滴禾下土")
f.write("\n离离原上草")
f.write("\n一岁一枯荣")
f.close()
结果:
8.文件操作的其他功能
(1)flush()
f = open('f_flush.txt', 'w', encoding='utf-8')
f.write('奇门遁甲') # 在f.close() 之前,写入的内容是在内存中的,而且可能此时txt文件里是没有内容的,所以可以加一句 f.flush(),把文件强制从内存buffer里刷新到硬盘
#一般内存里的buffer满了会自动刷新到硬盘,但是使用 f.flush() 可控制强制刷新到硬盘
f.close()
(2)tell() seek()
# 文本内容: hello world!
>>> f = open('file03.txt', 'r', encoding='gbk')
>>> f.tell() #返回当前文件操作光标位置
0
>>> f.seek(1) # 把操作文件的光标移到指定位置
1
>>> f.read()
'ello world!'
注意:tell(), seek()找的都是字节,长度都是按字节算的。另外,每个字符在不同编码格式下所占的字节长度不一样,gbk 一个中文占2个字节,utf-8 一个中文占3个字节
以中文为例:
# 文件内容:技高一筹
>>> f = open("file03.txt",'r',encoding='gbk')
>>> f.read()
'技高一筹'
>>> f.tell()
8
>>> f.seek(0) #把文件光标移动到起点 0
0
>>> f.seek(4) #把文件光标移动到 4,此时,gbk 下,一个汉字占2个字节,此时光标的位置在 技高和一筹之间
4
>>> f.read() # 所以,读取结果为 后两个字
'一筹'
>>>
#-----------------------------------------------------------------------------
>>> f.seek(1) #把文件光标移动到 1,“半个字”,此时读取内容不出问题,因为他只拿到了 技 字的一部分字节,打印会报错
1
>>> f.tell()
1
>>> f.read()
Traceback (most recent call last):File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'gbk' codec can't decode byte 0xef in position 6: incompletemultibyte sequence
(3)seekable() 判断文件是否可进行seek操作,readable() 判断文件是否可读,writable()判断文件是否可写
(4) truncate() 按指定长度截断文件
#文件内容: 技高一筹
>>> f = open("file03.txt",'r+',encoding='gbk')
>>> f.seek(2)
2
>>> f.truncate()
2
>>> f.read() #文件内容 只剩一个 “技” 字
truncate(4)指定长度的话,就从文件开头开始截取指定长度。不指定长度的话,就从当前位置到文件尾部的内容全去掉。
#文件内容: 技高一筹
>>> f = open("file03.txt",'r+',encoding='gbk')
>>> f.tell()
0
>>> f.truncate(4) #文件内容 只剩一个 “技高” 字
9. 实现文件内容的修改
import os
f = open('file05.txt', 'r+', encoding='gbk') #打开file05.txt 文件
f_new = open('file05_new.txt', 'w', encoding='gbk') # 创建一个新文件old_str = '李四'
new_str = '李云龙'
for line in f:if old_str in line: #逐行读取line = line.replace(old_str, new_str) #修改文件中的内容f_new.write(line) # 逐行读取的内容写到新创建的文件中
f.close()
f_new.close()os.replace('file05_new.txt', 'file05.txt') # 替换,以达到修改文件内容的目的(window用os.replace()可实现,但是使用os.rename()不可以,会报错,提示 file05.txt 已存在,无法创建)
转载于:https://www.cnblogs.com/friday69/p/9194606.html
python——文件处理相关推荐
- 在pycharm中无法引入同一目录下的python文件
问题 同一目录下存在以下两个python文件: 1. app.py 2. forms.py 现在我希望在app.py中引入forms.py的某个函数,但是出现如下情况: 主要表现在: 函数标红 无法自 ...
- 关于python文件读写小结
读文件 打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的): >>> f = open('test.txt', 'r') r表示是文本文件,rb是二进制文件 ...
- Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)
目录 1.创建项目 2.将.ui文件生成.py文件 2.1.Eric 6编译 2.2.Python命令行编译 2.3.脚本编译 3.界面.逻辑分离思想 在开始本文之前提醒各位朋友,Python记得安装 ...
- python 文件追加写入_Python写入文件–解释了打开,读取,追加和其他文件处理功能
python 文件追加写入 欢迎 (Welcome) Hi! If you want to learn how to work with files in Python, then this arti ...
- Python 文件 close() 方法
描述 Python 文件 close() 方法用于关闭一个已打开的文件.关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误. close() 方法允许调用多次. 当 file 对 ...
- python文件和目录
# -*- coding: utf-8 -*-import osdef printFile(rootDir):allFiles = os.listdir(rootDir) #列出文件夹下所有文件和目录 ...
- 深度学习运行python文件,出现跨路径搜索其他module,怎么解决?
在运行的目标python文件顶部,添加需要用的模块的搜索路径: 1)import sys, os sys.path.append(os.pardir) #添加的路径是,待运行目标python文件所在文 ...
- 第九课.Python文件操作
Python文件读写 最基本的,通过open返回文件句柄(文件对象),将文件读入内存: #f是一个文件对象 f=open('./sample.txt') data=f.read()#read读取所有内 ...
- sys.argv[n] (终端运行python文件第n个参数) 在 pycharm 中的应用
sys.argv[n] (终端运行python文件第n个参数) 在 pycharm 中的应用 打开pycharm --> Run --> Edit Configurations --> ...
- python文件信息排序_python文件排序的方法总结
在python环境中提供两种排序方案:用库函数sorted()对字符串排序,它的对象是字符:用函数sort()对数字排序,它的对象是数字,如果读取文件的话,需要进行处理(把文件后缀名'屏蔽'). (1 ...
最新文章
- CVPR2020 | 通过可微的代理投票损失进行6DoF对象位姿估计
- 疯狂软件2月3日Android就业班课程详细
- Java HashSet的实现原理详解
- python找答案__学小易找答案
- Adobe illustrator 剪切蒙版 - 连载 14
- AOP和IOC个人理解
- TurboMail邮件服务器帮你应付电子邮件归档危机
- 多线程往文件里写数据
- OpenCV学习资源
- 21考研数学二和英语二复习规划
- 【机器学习-周志华】学习笔记-第九章
- 搜集的思源黑体相关的资料
- 图像3尺度全小波包分解matlab,小波包分解
- 《凤凰项目 一个IT运维的传奇故事》读后感
- ul1581标准_UL 1581电线电缆燃烧试验
- 酷狗歌曲缓存kgtemp转mp3工具
- 量化策略“高股息率模型”长期有效性的实证
- Android图片压缩尺寸和质量
- POJ 2125 Destroying The Graph Acwing 2325. 有向图破坏(拆点+最小权点覆盖集)
- JAVA毕业设计装修设计管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库
热门文章
- 在poi-tl的区块对中实现用布尔值插入Word分页符的一种方法
- 一张图理解栈顶指针加加减减的问题
- Android之水滴落下的下拉刷新
- 百兆宽带插网线只有1mb/s的下载速度问题!
- 推荐一位字节大佬的刷题经验!
- 快速解绑微信公众号管理员
- html怎么拼图没有缝隙,【答疑】ps怎么拼图不留缝隙?急需答案!! - 视频教程线上学...
- 怎么看神经网络过早收敛_深度学习训练网络中,test loss比training loss早很多收敛,迭代次数要怎么取?...
- vs2013界面内容_我在2013年阅读的内容
- 看了这篇文章,再也不用纠结该选OV证书还是EV证书了