[ 文件操作]

1 对文件操作流程

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

现有文件如下:

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

  

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

2 文件打开模式

  1. ========= ===============================================================
  2. Character Meaning
  3. --------- ---------------------------------------------------------------
  4. 'r' open for reading (default)
  5. 'w' open for writing, truncating the file first
  6. 'x' create a new file and open it for writing
  7. 'a' open for writing, appending to the end of the file if it exists
  8. 'b' binary mode
  9. 't' text mode (default)
  10. '+' open a disk file for updating (reading and writing)
  11. 'U' universal newline mode (deprecated)
  12. ========= ===============================================================

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

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

3 文件具体操作

  1. def read(self, size=-1): # known case of _io.FileIO.read
  2. """
  3. 注意,不一定能全读回来
  4. Read at most size bytes, returned as bytes.
  5.  
  6. Only makes one system call, so less data may be returned than requested.
  7. In non-blocking mode, returns None if no data is available.
  8. Return an empty bytes object at EOF.
  9. """
  10. return ""
  11.  
  12. def readline(self, *args, **kwargs):
  13. pass
  14.  
  15. def readlines(self, *args, **kwargs):
  16. pass
  17.  
  18. def tell(self, *args, **kwargs): # real signature unknown
  19. """
  20. Current file position.
  21.  
  22. Can raise OSError for non seekable files.
  23. """
  24. pass
  25.  
  26. def seek(self, *args, **kwargs): # real signature unknown
  27. """
  28. Move to new file position and return the file position.
  29.  
  30. Argument offset is a byte count. Optional argument whence defaults to
  31. SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values
  32. are SEEK_CUR or 1 (move relative to current position, positive or negative),
  33. and SEEK_END or 2 (move relative to end of file, usually negative, although
  34. many platforms allow seeking beyond the end of a file).
  35.  
  36. Note that not all file objects are seekable.
  37. """
  38. pass
  39.  
  40. def write(self, *args, **kwargs): # real signature unknown
  41. """
  42. Write bytes b to file, return number written.
  43.  
  44. Only makes one system call, so not all of the data may be written.
  45. The number of bytes actually written is returned. In non-blocking mode,
  46. returns None if the write would block.
  47. """
  48. pass
  49.  
  50. def flush(self, *args, **kwargs):
  51. pass
  52.  
  53. def truncate(self, *args, **kwargs): # real signature unknown
  54. """
  55. Truncate the file to at most size bytes and return the truncated size.
  56.  
  57. Size defaults to the current file position, as returned by tell().
  58. The current file position is changed to the value of size.
  59. """
  60. pass
  61.  
  62. def close(self): # real signature unknown; restored from __doc__
  63. """
  64. Close the file.
  65.  
  66. A closed file cannot be used for further I/O operations. close() may be
  67. called more than once without error.
  68. """
  69. pass
  70. ##############################################################less usefull
  71. def fileno(self, *args, **kwargs): # real signature unknown
  72. """ Return the underlying file descriptor (an integer). """
  73. pass
  74.  
  75. def isatty(self, *args, **kwargs): # real signature unknown
  76. """ True if the file is connected to a TTY device. """
  77. pass
  78.  
  79. def readable(self, *args, **kwargs): # real signature unknown
  80. """ True if file was opened in a read mode. """
  81. pass
  82.  
  83. def readall(self, *args, **kwargs): # real signature unknown
  84. """
  85. Read all data from the file, returned as bytes.
  86.  
  87. In non-blocking mode, returns as much as is immediately available,
  88. or None if no data is available. Return an empty bytes object at EOF.
  89. """
  90. pass
  91.  
  92. def seekable(self, *args, **kwargs): # real signature unknown
  93. """ True if file supports random-access. """
  94. pass
  95.  
  96. def writable(self, *args, **kwargs): # real signature unknown
  97. """ True if file was opened in a write mode. """
  98. pass

文件操作方法介绍

  1. f = open('小重山') #打开文件
  2. # data1=f.read()#获取文件内容
  3. # data2=f.read()#获取文件内容
  4. #
  5. # print(data1)
  6. # print('...',data2)
  7. # data=f.read(5)#获取文件内容
  8.  
  9. # data=f.readline()
  10. # data=f.readline()
  11. # print(f.__iter__().__next__())
  12. # for i in range(5):
  13. # print(f.readline())
  14.  
  15. # data=f.readlines()
  16.  
  17. # for line in f.readlines():
  18. # print(line)
  19.  
  20. # 问题来了:打印所有行,另外第3行后面加上:'end 3'
  21. # for index,line in enumerate(f.readlines()):
  22. # if index==2:
  23. # line=''.join([line.strip(),'end 3'])
  24. # print(line.strip())
  25.  
  26. #切记:以后我们一定都用下面这种
  27. # count=0
  28. # for line in f:
  29. # if count==3:
  30. # line=''.join([line.strip(),'end 3'])
  31. # print(line.strip())
  32. # count+=1
  33.  
  34. # print(f.tell())
  35. # print(f.readline())
  36. # print(f.tell())#tell对于英文字符就是占一个,中文字符占三个,区分与read()的不同.
  37. # print(f.read(5))#一个中文占三个字符
  38. # print(f.tell())
  39. # f.seek(0)
  40. # print(f.read(6))#read后不管是中文字符还是英文字符,都统一算一个单位,read(6),此刻就读了6个中文字符
  41.  
  42. #terminal上操作:
  43. f = open('小重山2','w')
  44. # f.write('hello \n')
  45. # f.flush()
  46. # f.write('world')
  47.  
  48. # 应用:进度条
  49. # import time,sys
  50. # for i in range(30):
  51. # sys.stdout.write("*")
  52. # # sys.stdout.flush()
  53. # time.sleep(0.1)
  54.  
  55. # f = open('小重山2','w')
  56. # f.truncate()#全部截断
  57. # f.truncate(5)#全部截断
  58.  
  59. # print(f.isatty())
  60. # print(f.seekable())
  61. # print(f.readable())
  62.  
  63. f.close() #关闭文件

扩展文件操作模式:

  1. # f = open('小重山2','w') #打开文件
  2. # f = open('小重山2','a') #打开文件
  3. # f.write('莫等闲1\n')
  4. # f.write('白了少年头2\n')
  5. # f.write('空悲切!3')
  6.  
  7. # f.close()
  8.  
  9. #r+,w+模式
  10. # f = open('小重山2','r+') #以读写模式打开文件
  11. # print(f.read(5))#可读
  12. # f.write('hello')
  13. # print('------')
  14. # print(f.read())
  15.  
  16. # f = open('小重山2','w+') #以写读模式打开文件
  17. # print(f.read(5))#什么都没有,因为先格式化了文本
  18. # f.write('hello alex')
  19. # print(f.read())#还是read不到
  20. # f.seek(0)
  21. # print(f.read())
  22.  
  23. #w+与a+的区别在于是否在开始覆盖整个文件
  24.  
  25. # ok,重点来了,我要给文本第三行后面加一行内容:'hello 岳飞!'
  26. # 有同学说,前面不是做过修改了吗? 大哥,刚才是修改内容后print,现在是对文件进行修改!!!
  27. # f = open('小重山2','r+') #以写读模式打开文件
  28. # f.readline()
  29. # f.readline()
  30. # f.readline()
  31. # print(f.tell())
  32. # f.write('hello 岳飞')
  33. # f.close()
  34. # 和想的不一样,不管事!那涉及到文件修改怎么办呢?
  35.  
  36. # f_read = open('小重山','r') #以写读模式打开文件
  37. # f_write = open('小重山_back','w') #以写读模式打开文件
  38.  
  39. # count=0
  40. # for line in f_read:
  41. # if count==3:
  42. # f_write.write('hello,岳飞\n')
  43. #
  44. # else:
  45. # f_write.write(line)
  46.  
  47. # another way:
  48. # if count==3:
  49. #
  50. # line='hello,岳飞2\n'
  51. # f_write.write(line)
  52. # count+=1
  53.  
  54. # #二进制模式
  55. # f = open('小重山2','wb') #以二进制的形式读文件
  56. # # f = open('小重山2','wb') #以二进制的形式写文件
  57. # f.write('hello alvin!'.encode())#b'hello alvin!'就是一个二进制格式的数据,只是为了观看,没有显示成010101的形式

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

这样操作有一个很大的问题,数据若很大,系统内存会受不了;可以通过迭代器来优化这个过程。

with语句

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

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

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

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

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

文件处理补充:

阅读目录

一.文件处理流程

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

  1. 正趣果上果
  2. Interesting fruit fruit
  3.  
  4. 词:郭婞
  5. 曲:陈粒
  6. 编曲/混音/和声:燕池
  7. 萧:吗子
  8. Words: Guo
  9. Song: Chen tablets
  10. Arrange / Mix / Harmony: Yan Chi
  11. Xiao: Well
  12.  
  13. 你佩桃木降妖剑
  14. 他会一招不要脸
  15. 哇呀呀呀
  16. 输在没有钱
  17. 输在没有钱
  18. You wear peach down demon sword
  19. He will shamelessly
  20. Wow yeah
  21. Lost in the absence of money
  22. Lost in the absence of money
  23.  
  24. 你愿终老不羡仙
  25. 谁料温柔终老空了长生殿
  26. 哎唏唏唏
  27. 败给好容颜
  28. 败给好容颜
  29. You would like to end the old do not envy cents
  30. Mummy gentle death of the empty palace
  31. Hey Xi Xi
  32. Lost to good appearance
  33. Lost to good appearance
  34.  
  35. 人生在世三万天
  36. 趣果有间 孤独无解
  37. 苦练含笑半步癫
  38. 呐我去给你煮碗面
  39. Life is thirty thousand days
  40. Fun fruit there is no solution between solitude
  41. Hard practicing smiling half-step epilepsy
  42. I'll go and cook your bowl
  43.  
  44. 心怀啮雪大志愿
  45. 被人称作小可怜
  46. 呜呼呼呼
  47. 突样未成年
  48. 突样未成年
  49. Heart of the snow big volunteer
  50. Was called a small pitiful
  51. Alas
  52. Sudden sample of minor
  53. Sudden sample of minor
  54.  
  55. 本欲歃血定风月
  56. 乌飞兔走光阴只负尾生约
  57. 噫嘘嘘嘘
  58. 真心怕火炼
  59. 真心也怕火炼
  60. The desire to set the wind blood months
  61. Wu Flying Rabbit only time to bear the tail about
  62. 噫 boo boo
  63. Really afraid of fire refining
  64. Really afraid of fire
  65.  
  66. 人生在世三万天
  67. 趣果有间 孤独无解
  68. 苦练含笑半步癫
  69. 呐我去给你煮碗面
  70. Life is thirty thousand days
  71. Fun fruit there is no solution between solitude
  72. Hard practicing smiling half-step epilepsy
  73. I'll go and cook your bowl
  74.  
  75. 是非对错二十念
  76. 十方观遍 庸人恋阙
  77. 自学睡梦罗汉拳
  78. 冇知酱紫好危险
  79. Right and wrong twenty read
  80. square view over the Yong love Que
  81. Self - study sleep Lohan boxing
  82. Scare know that a good risk of Jiang Xi
  83.  
  84. 示范文件内容

二.基本操作

2.1 文件操作基本流程初探

  1. f = open('chenli.txt') #打开文件
  2. first_line = f.readline()
  3. print('first line:',first_line) #读一行
  4. print('我是分隔线'.center(50,'-'))
  5. data = f.read()# 读取剩下的所有内容,文件大时不要用
  6. print(data) #打印读取内容
  7.  
  8. f.close() #关闭文件

2.2 文件编码

文件保存编码如下

此刻错误的打开方式
  1. #不指定打开编码,即python解释器默认编码,python2.*为asciipython3.*为utf8
    f=open('chenli.txt')
  2. f.read() 

正确的打开方式
  1. f=open('chenli.txt',encoding='gbk')
  2. f.read()

2.3 文件打开模式

  1. 1 文件句柄 = open('文件路径', '模式')

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

打开文件的模式有:

  • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
  • w,只写模式【不可读;不存在则创建;存在则清空内容】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容】

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】

"b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

2.4 文件内置函数flush

flush原理:

  1. 文件操作是通过软件将文件从硬盘读到内存
  2. 写入文件的操作也都是存入内存缓冲区buffer(内存速度快于硬盘,如果写入文件的数据都从内存刷到硬盘,内存与硬盘的速度延迟会被无限放大,效率变低,所以要刷到硬盘的数据我们统一往内存的一小块空间即buffer中放,一段时间后操作系统会将buffer中数据一次性刷到硬盘)
  3. flush即,强制将写入的数据刷到硬盘

滚动条:

  1. import sys,time
  2.  
  3. for i in range(10):
  4. sys.stdout.write('#')
  5. sys.stdout.flush()
  6. time.sleep(0.2)

2.5 文件内光标移动

注意:read(3)代表读取3个字符,其余的文件内光标移动都是以字节为单位如seek,tell,read,truncate

整理中

2.6 open函数详解

1. open()语法

open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])
open函数有很多的参数,常用的是file,mode和encoding
file文件位置,需要加引号
mode文件打开模式,见下面3
buffering的可取值有0,1,>1三个,0代表buffer关闭(只适用于二进制模式),1代表line buffer(只适用于文本模式),>1表示初始化的buffer大小;
encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk;
errors的取值一般有strict,ignore,当取strict的时候,字符编码出现问题的时候,会报错,当取ignore的时候,编码出现问题,程序会忽略而过,继续执行下面的程序。
newline可以取的值有None, \n, \r, ”, ‘\r\n',用于区分换行符,但是这个参数只对文本模式有效;
closefd的取值,是与传入的文件参数有关,默认情况下为True,传入的file参数为文件的文件名,取值为False的时候,file只能是文件描述符,什么是文件描述符,就是一个非负整数,在Unix内核的系统中,打开一个文件,便会返回一个文件描述符。

2. Python中file()与open()区别
两者都能够打开文件,对文件进行操作,也具有相似的用法和参数,但是,这两种文件打开方式有本质的区别,file为文件类,用file()来打开文件,相当于这是在构造文件类,而用open()打开文件,是用python的内建函数来操作,建议使用open

3. 参数mode的基本取值

Character Meaning
‘r' open for reading (default)
‘w' open for writing, truncating the file first
‘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 (for backwards compatibility; should not be used in new code)

r、w、a为打开文件的基本模式,对应着只读、只写、追加模式;
b、t、+、U这四个字符,与以上的文件打开模式组合使用,二进制模式,文本模式,读写模式、通用换行符,根据实际情况组合使用、

常见的mode取值组合

  1. 1 rrt 默认模式,文本模式读
  2. 2 rb 二进制文件
  3. 3
  4. 4 wwt 文本模式写,打开前文件存储被清空
  5. 5 wb 二进制写,文件存储同样被清空
  6. 6
  7. 7 a 追加模式,只能写在文件末尾
  8. 8 a+ 可读写模式,写只能写在文件末尾
  9. 9
  10. 10 w+ 可读写,与a+的区别是要清空文件内容
  11. 11 r+ 可读写,与a+的区别是可以写到文件任何位置

Python基础7:文件操作的更多相关文章

  1. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  2. python基础之文件操作

    对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等. 而在python中提供了必要的函数和方法进行默认情况下的文 ...

  3. Day3 Python基础学习——文件操作、函数

    一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 #打开文件,读写文件,关闭文件 http://www.cnblogs.com/linha ...

  4. python基础14_文件操作

    文件操作,通常是打开,读,写,追加等.主要涉及 编码 的问题. #!/usr/bin/env python # coding:utf-8 ## open实际上是从OS请求,得到文件句柄 f = ope ...

  5. 【python基础】文件操作

    文件操作目录 一 .文件操作 二 .打开文件的模式 三 .操作文件的方法 四 .文件内光标移动 五. 文件的修改 一.文件操作介绍 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用pyt ...

  6. python基础4文件操作

    在磁盘上读取文件的 功能都是由操作系统来实现的,不允许普通的程序直接操作磁盘,所以读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据( ...

  7. Python基础 之 文件操作

    文件操作 一.路径 文件绝对路径:d:\python.txt 文件相对路径:在IDEA左边的文件夹中 二.编码方式 utf-8 gbk... 三.操作方式 1.只读 r 和 rb 绝对路径的打开操作 ...

  8. Python基础--基本文件操作

    全部的编程语言都一样,学完了一些自带的数据机构后,就要操作文件了. 文件操作才是实战中的王道. 所以,今天就来分享一下Python中关于文件的一些基本操作. open方法 文件模式 这个模式对于写入文 ...

  9. python基础(10):文件操作

    1. 初识文件操作 使⽤python来读写⽂件是非常简单的操作.我们使⽤open()函数来打开⼀个⽂件,获取到⽂ 件句柄,然后通过⽂件句柄就可以进⾏各种各样的操作了,根据打开⽅式的不同能够执⾏的操 作 ...

  10. Python基础学习——文件操作、函数

    一.文件操作 文件操作链接:http://www.cnblogs.com/linhaifeng/articles/5984922.html(更多内容见此链接) 一.对文件操作流程 打开文件,得到文件句 ...

随机推荐

  1. Linux 通过sendmail 发邮件到外部邮箱

    最近在写自动化巡检脚本,想着怎么预警后自动发送邮件报警. 首先下载最新版本mailx-12.4.tar.bz2 # wget http://sourceforge.net/projects/heirl ...

  2. 《java JDK7 学习笔记》之对象封装

    1.构造函数实现对象初始化流程的封装.方法封装了操作对象的流程.java中还可以使用private封装对象私有数据成员.封装的目的主要就是隐藏对象细节,将对象当做黑箱子进行操作. 2.在java命名规 ...

  3. W3School-CSS 轮廓(Outline)实例

    CSS 轮廓(Outline)实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) 实例 CSS 内 ...

  4. 分布式搜索引擎ElasticSearch+Kibana (Marvel插件安装详解)

    在安装插件的过程中,尤其是安装Marvel插件遇到了很多问题,要下载license.Marvel-agent,又要下载安装Kibana 版本需求 Java 7 or later Elasticsear ...

  5. 3-1 Linux文件管理类命令详解

    根据马哥Linux初级 03-01整理 1. 目录管理 ls cd pwd mkdir rmdir tree 2. 文件管理 touch stat file rm cp mv nano 3. 日期时间 ...

  6. log4j 不同模块输出到不同的文件

    1.实现目标 不同业务的日志信息需要打印到不同的文件中,每天或者每个小时生成一个文件.如,注册的信息打印到register.log,每天凌晨生成一个register-年月日.log文件, 登录信息的日 ...

  7. Java关键字 ClassName.this(类名.this)的理解

    关键字this用于指代当前的对象.因此,类内部可以使用this作为前缀引用实例成员: this()代表了调用另一个构造函数,至于调用哪个构造函数根据参数表确定.this()调用只 能出现在构造函数的第 ...

  8. java1.8函数式接口

    package com.wzy.t1; @FunctionalInterface//此注解用来声明此接口为函数式接口 public interface People { /** * 1.函数式接口只能 ...

  9. python_爬虫一之爬取糗事百科上的段子

    目标 抓取糗事百科上的段子 实现每按一次回车显示一个段子 输入想要看的页数,按 'Q' 或者 'q' 退出 实现思路 目标网址:糗事百科 使用requests抓取页面  requests官方教程 使用 ...

  10. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 角色权限的配置页面改进优化

    往往开发的人不是维护的人,开发的单位不是维护的单位.信息的畅通沟通交流很多时候会有打折.扭曲.甚至是容易得到歪解.配置错业务操作权限.为了防止发生没必要的麻烦,甚至是发生重大错误,我们的软件需要不断换 ...