全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Python 文件操作的详解及实例

Python 文件操作的详解及实例

一、文件操作

1、对文件操作流程

  • 打开文件,得到文件句柄并赋值给一个变量
  • 通过句柄对文件进行操作
  • 关闭文件

现有文件如下:

昨夜寒蛩不住鸣。
惊回千里梦,已三更。
起来独自绕阶行。
人悄悄,帘外月胧明。
白首为功名,旧山松竹老,阻归程。
欲将心事付瑶琴。
知音少,弦断有谁听。

f = open('小重山') #打开文件
data=f.read()#获取文件内容
f.close() #关闭文件

注意:if in the win,hello文件是utf8保存的,打开文件时open函数是通过操作系统打开的文件,而win操作系统默认的是gbk编码,所以直接打开会乱码,需要f=open(‘hello',encoding='utf8'),hello文件如果是gbk保存的,则直接打开即可。

2、文件打开模式  

Character Meaning

'r'    open for reading (default)
'w'    open for writing, truncating the file first
'x'    create a new file and open it for writing
'a'    open for writing, appending to the end of the file if it exists
'b'    binary mode
't'    text mode (default)
'+'    open a disk file for updating (reading and writing)
'U'    universal newline mode (deprecated)

先介绍三种最基本的模式:

# f = open('小重山2','w') #打开文件
# f = open('小重山2','a') #打开文件
# f.write('莫等闲1\n')
# f.write('白了少年头2\n')
# f.write('空悲切!3')

3、文件具体操作

f = open('小重山') #打开文件
# data1=f.read()#获取文件内容
# data2=f.read()#获取文件内容
#
# print(data1)
# print('...',data2)
# data=f.read(5)#获取文件内容

# data=f.readline()
# data=f.readline()
# print(f.__iter__().__next__())
# for i in range(5):
#   print(f.readline())

# data=f.readlines()

# for line in f.readlines():
#   print(line)


# 问题来了:打印所有行,另外第3行后面加上:'end 3'
# for index,line in enumerate(f.readlines()):
#   if index==2:
#     line=''.join([line.strip(),'end 3'])
#   print(line.strip())

#切记:以后我们一定都用下面这种
# count=0
# for line in f:
#   if count==3:
#     line=''.join([line.strip(),'end 3'])
#   print(line.strip())
#   count+=1

# print(f.tell())
# print(f.readline())
# print(f.tell())#tell对于英文字符就是占一个,中文字符占三个,区分与read()的不同.
# print(f.read(5))#一个中文占三个字符
# print(f.tell())
# f.seek(0)
# print(f.read(6))#read后不管是中文字符还是英文字符,都统一算一个单位,read(6),此刻就读了6个中文字符

#terminal上操作:
f = open('小重山2','w')
# f.write('hello \n')
# f.flush()
# f.write('world')

# 应用:进度条
# import time,sys
# for i in range(30):
#   sys.stdout.write("*")
#   # sys.stdout.flush()
#   time.sleep(0.1)

# f = open('小重山2','w')
# f.truncate()#全部截断
# f.truncate(5)#全部截断

# print(f.isatty())
# print(f.seekable())
# print(f.readable())

f.close() #关闭文件

接下来我们继续扩展文件模式:

# f = open('小重山2','w') #打开文件
# f = open('小重山2','a') #打开文件
# f.write('莫等闲1\n')
# f.write('白了少年头2\n')
# f.write('空悲切!3')


# f.close()

#r+,w+模式
# f = open('小重山2','r+') #以读写模式打开文件
# print(f.read(5))#可读
# f.write('hello')
# print('------')
# print(f.read())


# f = open('小重山2','w+') #以写读模式打开文件
# print(f.read(5))#什么都没有,因为先格式化了文本
# f.write('hello alex')
# print(f.read())#还是read不到
# f.seek(0)
# print(f.read())

#w+与a+的区别在于是否在开始覆盖整个文件


# ok,重点来了,我要给文本第三行后面加一行内容:'hello 岳飞!'
# 有同学说,前面不是做过修改了吗? 大哥,刚才是修改内容后print,现在是对文件进行修改!!!
# f = open('小重山2','r+') #以写读模式打开文件
# f.readline()
# f.readline()
# f.readline()
# print(f.tell())
# f.write('hello 岳飞')
# f.close()
# 和想的不一样,不管事!那涉及到文件修改怎么办呢?

# f_read = open('小重山','r') #以写读模式打开文件
# f_write = open('小重山_back','w') #以写读模式打开文件

# count=0
# for line in f_read:
  # if count==3:
  #   f_write.write('hello,岳飞\n')
  #
  # else:
  #   f_write.write(line)


  # another way:
  # if count==3:
  #
  #   line='hello,岳飞2\n'
  # f_write.write(line)
  # count+=1

# #二进制模式
# f = open('小重山2','wb') #以二进制的形式读文件
# # f = open('小重山2','wb') #以二进制的形式写文件
# f.write('hello alvin!'.encode())#b'hello alvin!'就是一个二进制格式的数据,只是为了观看,没有显示成010101的形式

注意1: 无论是py2还是py3,在r+模式下都可以等量字节替换,但没有任何意义的! 

注意2:有同学在这里会用readlines得到内容列表,再通过索引对相应内容进行修改,最后将列表重新写会该文件。

这种思路有一个很大的问题,数据若很大,你的内存会受不了的,而我们的方式则可以通过迭代器来优化这个过程。 

补充:rb模式以及seek

在py2中:

#昨夜寒蛩不住鸣.

f = open('test','r',) #以写读模式打开文件

f.read(3)

# f.seek(3)
# print f.read(3) # 夜

# f.seek(3,1)
# print f.read(3) # 寒

# f.seek(-4,2)
# print f.read(3) # 鸣

在py3中:

# test: 
昨夜寒蛩不住鸣.

f = open('test','rb',) #以写读模式打开文件

f.read(3)

# f.seek(3)
# print(f.read(3)) # b'\xe5\xa4\x9c'

# f.seek(3,1)
# print(f.read(3)) # b'\xe5\xaf\x92'

# f.seek(-4,2)
# print(f.read(3))  # b'\xe9\xb8\xa3'

#总结: 在py3中,如果你想要字符数据,即用于观看的,则用r模式,这样我f.read到的数据是一个经过decode的
#   unicode数据; 但是如果这个数据我并不需要看,而只是用于传输,比如文件上传,那么我并不需要decode
#   直接传送bytes就好了,所以这个时候用rb模式.

#   在py3中,有一条严格的线区分着bytes和unicode,比如seek的用法,在py2和py3里都是一个个字节的seek,
#   但在py3里你就必须声明好了f的类型是rb,不允许再模糊.

#建议: 以后再读写文件的时候直接用rb模式,需要decode的时候仔显示地去解码.

4、with语句

为了避免打开文件后忘记关闭,可以通过管理上下文,即:

with open('log','r') as f:
    pass

如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。

在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:

with open('log1') as obj1, open('log2') as obj2:
  pass2

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Python  # 文件操作  # 文件操作的详解  # 文件输出  # 简单文件操作python 修改文件指定行的方法  # Python 文件操作技巧(File operation) 实例代码分析  # Python文件操作  # open读写文件  # 追加文本内容实例  # Python 文件操作实现代码  # Python复制文件操作实例详解  # Python常见文件操作的函数示例代码  # Python实现的读取/更改/写入xml文件操作示例  # Python中shutil模块的常用文件操作函数用法示例  # python读写文件操作示例程序  # 使用Python进行稳定可靠的文件操作详解  # 详解Python中的文件操作  # 使用Python对Csv文件操作实例代码  # python 文件操作删除某行的实例  # Python读取properties配置文件操作示例  # python with statement 进行文件操作指南  # python解析xml文件操作实例  # Python文件操作类操作实例详解  # Python文件操作方法详解  # 岳飞  # 来了  # 昨夜  # 句柄  # 英文  # 白首  # 的是  # 都是  # 是一个  # 操作系统  # 在这里  # 好了  # 你就  # 多个  # 才是  # 如有  # 莫等闲  # 但在  # 可以通过  # 希望能 


相关文章: 如何快速配置高效服务器建站软件?  Python lxml的etree和ElementTree有什么区别  如何制作算命网站,怎么注册算命网站?  制作网站的模板软件,网站怎么建设?  如何使用Golang安装API文档生成工具_快速生成接口文档  如何通过虚拟主机快速搭建个人网站?  建站之星2.7模板快速切换与批量管理功能操作指南  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何高效搭建专业期货交易平台网站?  建站主机类型有哪些?如何正确选型  建站之星展会模版如何一键下载生成?  如何通过IIS搭建网站并配置访问权限?  如何快速搭建高效香港服务器网站?  PHP 500报错的快速解决方法  开心动漫网站制作软件下载,十分开心动画为何停播?  ,在苏州找工作,上哪个网站比较好?  如何快速生成ASP一键建站模板并优化安全性?  建站之星如何助力网站排名飙升?揭秘高效技巧  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  油猴 教程,油猴搜脚本为什么会网页无法显示?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  完全自定义免费建站平台:主题模板在线生成一站式服务  网站制作软件有哪些,制图软件有哪些?  制作网站的公司有哪些,做一个公司网站要多少钱?  html制作网站的步骤有哪些,iapp如何添加网页?  清除minerd进程的简单方法  商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  在线制作视频网站免费,都有哪些好的动漫网站?  如何自定义建站之星网站的导航菜单样式?  广州美橙建站如何快速搭建多端合一网站?  学校为何禁止电信移动建设网站?  网站制作企业,网站的banner和导航栏是指什么?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  如何注册花生壳免费域名并搭建个人网站?  ,购物网站怎么盈利呢?  网站制作公司排行榜,抖音怎样做个人官方网站  建站主机选购指南:核心配置与性价比推荐解析  建站之星在线客服如何快速接入解答?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  公众号网站制作网页,微信公众号怎么制作?  如何选择网络建站服务器?高效建站必看指南  Swift中switch语句区间和元组模式匹配  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  ,想在网上投简历,哪几个网站比较好?  建站之星代理平台如何选择最佳方案?  黑客入侵网站服务器的常见手法有哪些? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。