文件操作

1.1 对文件操作流程

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

现有文件如下:

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

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

注意 if in the win,hello文件是utf8保存的,打开文件时open函数是通过操作系统打开的文件,而win操作系统

默认的是gbk编码,所以直接打开会乱码,需要f=open('hello',encoding='utf8'),hello文件如果是gbk保存的,则直接打开即可。

1.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')

1.3 文件具体操作

def read(self, size=-1): # known case of _io.FileIO.read"""注意,不一定能全读回来Read at most size bytes, returned as bytes.Only makes one system call, so less data may be returned than requested.In non-blocking mode, returns None if no data is available.Return an empty bytes object at EOF."""return ""def readline(self, *args, **kwargs):passdef readlines(self, *args, **kwargs):passdef tell(self, *args, **kwargs): # real signature unknown"""Current file position.Can raise OSError for non seekable files."""passdef seek(self, *args, **kwargs): # real signature unknown"""Move to new file position and return the file position.Argument offset is a byte count.  Optional argument whence defaults toSEEK_SET or 0 (offset from start of file, offset should be >= 0); other valuesare SEEK_CUR or 1 (move relative to current position, positive or negative),and SEEK_END or 2 (move relative to end of file, usually negative, althoughmany platforms allow seeking beyond the end of a file).Note that not all file objects are seekable."""passdef write(self, *args, **kwargs): # real signature unknown"""Write bytes b to file, return number written.Only makes one system call, so not all of the data may be written.The number of bytes actually written is returned.  In non-blocking mode,returns None if the write would block."""passdef flush(self, *args, **kwargs):passdef truncate(self, *args, **kwargs): # real signature unknown"""Truncate the file to at most size bytes and return the truncated size.Size defaults to the current file position, as returned by tell().The current file position is changed to the value of size."""passdef close(self): # real signature unknown; restored from __doc__"""Close the file.A closed file cannot be used for further I/O operations.  close() may becalled more than once without error."""pass
##############################################################less usefulldef fileno(self, *args, **kwargs): # real signature unknown""" Return the underlying file descriptor (an integer). """passdef isatty(self, *args, **kwargs): # real signature unknown""" True if the file is connected to a TTY device. """passdef readable(self, *args, **kwargs): # real signature unknown""" True if file was opened in a read mode. """passdef readall(self, *args, **kwargs): # real signature unknown"""Read all data from the file, returned as bytes.In non-blocking mode, returns as much as is immediately available,or None if no data is available.  Return an empty bytes object at EOF."""passdef seekable(self, *args, **kwargs): # real signature unknown""" True if file supports random-access. """passdef writable(self, *args, **kwargs): # real signature unknown""" True if file was opened in a write mode. """pass

操作方法介绍

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的时候仔显示地去解码.

1.4 with语句

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

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

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

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

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

 

 

  

转载于:https://www.cnblogs.com/xuyaping/p/7691845.html

python(11)- 文件处理相关推荐

  1. python 下载文件-Python下载文件的11种方式

    原标题:Python下载文件的11种方式 在本教程中,你将学习如何使用不同的Python模块从web下载文件.此外,你将下载常规文件.web页面.Amazon S3和其他资源. 最后,你将学习如何克服 ...

  2. Python下载文件的11种方式

    译者:天天向上    英文原文: https://dzone.com/articles/simple-examples-of-downloading-files-using-python 在本教程中, ...

  3. python如何在手机上下载模块-Python 下载文件的 11 种方式

    考虑以下代码: 你只需使用requests模块的get方法获取URL,并将结果存储到一个名为"myfile"的变量中.然后,将这个变量的内容写入文件. 使用wget 你还可以使用P ...

  4. python下载文件的11种方式_Python下载文件的11种方式

    在本教程中,你将学习如何使用不同的Python模块从web下载文件.此外,你将下载常规文件.web页面.Amazon S3和其他资源. 最后,你将学习如何克服可能遇到的各种挑战,例如下载重定向的文件. ...

  5. python打开文件_python如何学习

    1.Python 文件I/O 本章只讲述所有基本的 I/O 函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函 ...

  6. 下列不是python对文件的读操作方法是-大工20春《数据挖掘》在线作业1【参考答案】...

    可做奥鹏全部院校作业论文!答案请添加qq:599792222 或 微信:1095258436 大工20春<数据挖掘>在线作业1 试卷总分:100  得分:100 一.单选题 (共 10 道 ...

  7. python对文件的读操作方法有哪些-python--文件的读写操作

    Python提供了必要的函数和方法进行默认情况下的文件基本操作 文件打开方式: open(name[,mode[buf]]) name:文件路径 mode:打开方式 buf:缓冲buffering大小 ...

  8. python写文件读文件-Python 实例:读写文件

    原标题:Python 实例:读写文件 读写文件是最常见的IO操作.内置了读写文件的函数,用法和的读写文件非常类似.在磁盘上读写文件的功能都是由提供的,现代不允许普通的程序直接操作磁盘,所以,读写文件就 ...

  9. python下载大文件-python 大文件

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 大文件上传服务一.前端(http:fex.baidu.comwebuploade ...

  10. python读取文件第n行-Python读取文件后n行的代码示例

    这篇文章主要介绍了Python实现读取文件最后n行的方法,涉及Python针对文件的读取.遍历与运算相关操作技巧,需要的朋友可以参考下# -*- coding:utf8-*- import os im ...

最新文章

  1. bash shell的一些基本概念
  2. linux 安装 nodejs
  3. [云炬python3玩转机器学习] 5-7,8 多元线性回归正规解及其实现
  4. java实战调用数据库_实战php调用java类由java类读数据库完成相关操作(InberWrite)_PHP...
  5. jupyter notebook 安装教程
  6. Vue学习笔记之06-响应式的数组方法
  7. 40. Element getAttribute() 方法
  8. 如何使用@PostConstruct初始化敏感词库和hutool过滤敏感词信息
  9. 飞行控制系统中高度的表示
  10. SpringMVC添加登录页面以及首页实现跳转
  11. 计算机的文档库在哪哪里,电脑的word文档在哪里
  12. 一、Composer下载安装
  13. JZOJ 5207【GDOI2018模拟7.7】暴力大神hxx
  14. 互联网项目发币一年,“简书们”活得好吗?
  15. ##模拟图灵机 XN*2的运算
  16. 计算机教师幽默介绍,老师幽默的自我介绍6篇
  17. LDO investigation
  18. CRC/SoftPLC/OpenCASCADE/CAD/CAM/SVG开源项目收藏
  19. 【技术美术】贴图、纹理、材质的区别
  20. Windows10安装CentOS系统U盘和硬盘无法识别解决办法

热门文章

  1. kafka文档: 配置选项翻译
  2. 微信小程序发布视频带封面图标题
  3. CCF系列题解--2017年12月第三题 Crontab
  4. 不要再吐槽我R7000 2020的龙腾屏了,我给它换上了京东方的4K屏(已经填坑,谨慎踩坑)
  5. 【opencv学习笔记】第五篇:访问图像中像素的三种方式、ROI区域图像叠加和图像混合
  6. 计算机什么课学mcmc,MCMC案例学习
  7. 计算机网络技术思维导图Xmind
  8. 读取xlsx的sheet
  9. 云课堂智慧职教答案python_2020智慧职教云课堂Python编程基础答案完整满分单元测试答案...
  10. java之空指针异常处理