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——文件处理相关推荐

  1. 在pycharm中无法引入同一目录下的python文件

    问题 同一目录下存在以下两个python文件: 1. app.py 2. forms.py 现在我希望在app.py中引入forms.py的某个函数,但是出现如下情况: 主要表现在: 函数标红 无法自 ...

  2. 关于python文件读写小结

    读文件 打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的): >>> f = open('test.txt', 'r') r表示是文本文件,rb是二进制文件 ...

  3. Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)

    目录 1.创建项目 2.将.ui文件生成.py文件 2.1.Eric 6编译 2.2.Python命令行编译 2.3.脚本编译 3.界面.逻辑分离思想 在开始本文之前提醒各位朋友,Python记得安装 ...

  4. python 文件追加写入_Python写入文件–解释了打开,读取,追加和其他文件处理功能

    python 文件追加写入 欢迎 (Welcome) Hi! If you want to learn how to work with files in Python, then this arti ...

  5. Python 文件 close() 方法

    描述 Python 文件 close() 方法用于关闭一个已打开的文件.关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误. close() 方法允许调用多次. 当 file 对 ...

  6. python文件和目录

    # -*- coding: utf-8 -*-import osdef printFile(rootDir):allFiles = os.listdir(rootDir) #列出文件夹下所有文件和目录 ...

  7. 深度学习运行python文件,出现跨路径搜索其他module,怎么解决?

    在运行的目标python文件顶部,添加需要用的模块的搜索路径: 1)import sys, os sys.path.append(os.pardir) #添加的路径是,待运行目标python文件所在文 ...

  8. 第九课.Python文件操作

    Python文件读写 最基本的,通过open返回文件句柄(文件对象),将文件读入内存: #f是一个文件对象 f=open('./sample.txt') data=f.read()#read读取所有内 ...

  9. sys.argv[n] (终端运行python文件第n个参数) 在 pycharm 中的应用

    sys.argv[n] (终端运行python文件第n个参数) 在 pycharm 中的应用 打开pycharm --> Run --> Edit Configurations --> ...

  10. python文件信息排序_python文件排序的方法总结

    在python环境中提供两种排序方案:用库函数sorted()对字符串排序,它的对象是字符:用函数sort()对数字排序,它的对象是数字,如果读取文件的话,需要进行处理(把文件后缀名'屏蔽'). (1 ...

最新文章

  1. CVPR2020 | 通过可微的代理投票损失进行6DoF对象位姿估计
  2. 疯狂软件2月3日Android就业班课程详细
  3. Java HashSet的实现原理详解
  4. python找答案__学小易找答案
  5. Adobe illustrator 剪切蒙版 - 连载 14
  6. AOP和IOC个人理解
  7. TurboMail邮件服务器帮你应付电子邮件归档危机
  8. 多线程往文件里写数据
  9. OpenCV学习资源
  10. 21考研数学二和英语二复习规划
  11. 【机器学习-周志华】学习笔记-第九章
  12. 搜集的思源黑体相关的资料
  13. 图像3尺度全小波包分解matlab,小波包分解
  14. 《凤凰项目 一个IT运维的传奇故事》读后感
  15. ul1581标准_UL 1581电线电缆燃烧试验
  16. 酷狗歌曲缓存kgtemp转mp3工具
  17. 量化策略“高股息率模型”长期有效性的实证
  18. Android图片压缩尺寸和质量
  19. POJ 2125 Destroying The Graph Acwing 2325. 有向图破坏(拆点+最小权点覆盖集)
  20. JAVA毕业设计装修设计管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库

热门文章

  1. 在poi-tl的区块对中实现用布尔值插入Word分页符的一种方法
  2. 一张图理解栈顶指针加加减减的问题
  3. Android之水滴落下的下拉刷新
  4. 百兆宽带插网线只有1mb/s的下载速度问题!
  5. 推荐一位字节大佬的刷题经验!
  6. 快速解绑微信公众号管理员
  7. html怎么拼图没有缝隙,【答疑】ps怎么拼图不留缝隙?急需答案!! - 视频教程线上学...
  8. 怎么看神经网络过早收敛_深度学习训练网络中,test loss比training loss早很多收敛,迭代次数要怎么取?...
  9. vs2013界面内容_我在2013年阅读的内容
  10. 看了这篇文章,再也不用纠结该选OV证书还是EV证书了