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 文件操作的详解及实例相关推荐

  1. python 相对导入_Python相对导入机制详解

    Google FEB 26TH, 2015 Python相对导入机制详解 这个答案能解释大多关于 relative import,即相对导入的疑惑,讲解十分详尽清晰,算是 SO 上被低估的一个答案. ...

  2. python输出命令_Python输出各行命令详解

    创建main.py文件并粘贴下面代码 点击右键运行Debug 'main'后,下方的Debug窗口会出现ImportError: No module named 'bottle'这样的提示,提示导入b ...

  3. python模块讲解_python中常用模块详解一

    1.time 模块 import time s = time.localtime() # 把时间转化成格式化的时间,通过. 取得里面的年月日等 struct_time 格式 time.struct_t ...

  4. python pdb 安装_Python调试工具pdb使用详解

    Python调试工具pdb使用详解 [简介] pdb是Python自带的一个包,为python程序提供了一种交互的源代码调试功能. [使用方法] 1. 使用命令: python -m pdb xxx. ...

  5. python os 常用方法_python中os常用方法详解

    os的官方解释 os os: This module provides a portable way of using operating system dependent functionality ...

  6. python list方法操作_Python 列表(List)操作方法详解

    参考文献来源于脚本之家 列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型.列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0 ...

  7. python subprocess使用_Python subprocess模块用法详解

    在 Python 2.7 及 Python 3 中,系统自带了 subprocess 模块,该模块主要用来管理子进程. 在使用该模块之前需要将其引入,方法如下: import subprocess 在 ...

  8. python shelve模块_python之shelve模块详解

    #七.代码示例#1.创建一个shelf对象,直接使用open函数即可 importshelve s= shelve.open('test_shelf.db') #try: s['kk'] = {'in ...

  9. python 传感器数据结构_Python常用的数据结构详解

    数据结构:通俗点说,就是储存大量数据的容器.这里主要介绍Python的4种基本数据结构:列表.字典.元组.集合. 格式如下: 列表:list = [val1,val2,val3,val4],用中括号: ...

  10. python 32bit数据结构_python实现bitmap数据结构详解

    bitmap是很常见的算法设计,例如用以Bloom Filter中:用以无反复整数金额的排列这些.bitmap一般根据数组来完成,数组中每一个原素能够当做是一系列二进制数,全部元素组成更高的二进制结合 ...

最新文章

  1. ls 中一些你不知道的事
  2. java符号引用 直接引用_JVM的符号引用和直接引用
  3. “要源码上门自取”,结果人真上门了!国内企业再惹争议
  4. AxonFramework,存储库
  5. mongodb索引使用
  6. 共享内存及其用mmap实现共享内存
  7. css鼠标拖拉卡顿_66个值得收藏的CSS开发技巧
  8. 海康威视工业相机使用
  9. 织梦dedecms采集规则,东方资讯娱乐新闻采集规则
  10. usb 测试软件,usb端口测试(USB端口测试工具)
  11. OpenCalib: 自动驾驶多传感器的一个开源标定工具箱
  12. 虚拟机无法上网的原因
  13. CSS / 清除浮动+切图+属性书写顺序+页面布局思路
  14. turtle库画图单击鼠标获取坐标位置
  15. css局域样式使用scoped,防止样式污染
  16. 快递/短信等热门API大全分享
  17. 微信获取nickname mysql乱码_微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程...
  18. 覆盖alert对话框-自制Jquery.alert插件
  19. mongodb 查询操作,条件查询,where,find等常用操作
  20. S7-200 smart xp(sp3) 环境下的编程软件

热门文章

  1. 如何在今日头条做推广?今日头条推广怎么样?
  2. 在Sever 2012中应用iSCSI目标程序
  3. html图片快速轮播特效代码,轻松实现javascript图片轮播特效
  4. OpenCV:二值化函数cv2.threshold
  5. 景元利老师--沪师经纪
  6. python 模拟浏览器selenium_python爬虫10:使用selenium模拟浏览器登录账号
  7. U盘有占用空间,但无文件或者都变成了快捷方式
  8. PHP 简易聊天室 利用redis的订阅发布功能
  9. 加密解密技术基础及用OpenSSL创建私有CA
  10. 网页设计实验四(DIV+CSS 综合运用 )