美文网首页python基础
6. python文件操作

6. python文件操作

作者: 花间派I风月 | 来源:发表于2019-01-07 21:22 被阅读1次

一、 简述

在Python3里提供了open函数来对文件操作,Python2中有file函数 。


二、打开文件的模式

    1. r 以只读方式打开文件,文件指针将会放在文件开头的位置,这也是默认的模式;
    1. w 以只写入的方式打开文件,如果文件存在内容,会清空文件后,再打开,文件指针在开头的位置。如果文件不存在,则创建新文件;
    1. a 打开文件以追加的模式,如果该文件存在,文件指针会放到文件末尾的位置,也就是说新的内容会将被写入到文件的末尾。如果文件不存在,创建新文件来写入。
    1. x Python3里新添加的模式,以只写入的方式打开文件,文件内容如果存在会报错,否则则创建新文件。一般建议,写入时使用x而不用w;
    1. r+ 读写模式打开文件,文件指针会在开头的位置;
    1. w+ 写读模式打开文件,如果文件里有内容,就会覆盖,否则的话,会创建新文件,使用场景还是不多;
    1. a+ 写读模式打开文件,如果存在,文件指针会放在文件的结尾。文件打开时会是追加模式,如果不存在会创建新的文件;
    1. x+ 写读模式打开文件;
    1. rb 二进制读模式打开文件,文件指针会放在文件的开头;
    1. rb+ 二进制只读模式打开文件,文件指针会放在文件的开头;
    1. wb 二进制的只写模式打开文件,如果文件存在会清空文件,否则创建新文件;
    1. wb+ 二进制写读模式,如果文件存在会覆盖文件,否则会创建新文件;
    1. xb 二进制只写,如果文件存在报错,否则创建新文件。
    1. xb+ 二进制写读模式打开文件,如果存在覆盖,否则创建新文件。
    1. ab 二进制追加模式打开文件,如果存在文件,文件指针在末尾,文件打开时会是追加模式,新内容在旧内容之后,如果文件不存在,创建新文件来写入。
    1. ab+ 二进制写读模式打开,如果存在文件,文件指针在末尾,如果不存在,创建新文件。

三、常用方法

  1. open()函数语法
# 使用open函数的语法:
file object = open(file_name [, access_mode][, buffering])
'''
   file object: 文件句柄,在后面通过此句柄对该文件操作等等;
   file_name:  文件名称,如果不在当前目录下,需要制定绝对/相对路径
   access_mode: 打开模式,表示允许对文件操作的权限等
   buffering:如果值为0,就不会有寄存。如果为1,访问文件时会寄存。
   如果值设定大于1的整数,说明这就是寄存区的大小。
   如果取负值,寄存区的缓冲大小则为系统默认。
'''
  1. closed 如果返回为True表示文件已关闭,否则为False
>>> f.closed
False
>>> f.close()
>>> f.closed
True
  1. mode 查看文件打开的模式
>>> f = open('test4.txt','ab+')
>>> f.mode
'ab+'
  1. name 文件名
>>> f.name
'test4.txt'
  1. raw 查看文件句柄详细信息
>>> f.raw
<_io.FileIO name='test4.txt' mode='ab+'>
  1. encoding 查看编码
>>> f.encoding
'UTF-8'
  1. close 关闭文件句柄
>>> f.close()
  1. read 读取指定字节数据,如果不指定值,则返回整个文件内容
>>> f.read()
'1,2,3abc'
>>> f.read(3)
'1,2'
  1. readline 仅读取一行数据,可以指定读取的字节数
# 文件内容三行
>>> f.read()
'1,2,3abc\nABC\nDEF'
>>> f.seek(0)
0
# 一次只读取一行内容
>>> f.readline()
'1,2,3abc\n'
>>> f.tell()
9
>>> f.seek(0)
0
# 可以指定读取的字节数
>>> f.readline(3)
'1,2'
  1. readlines 读取所有数据,并根据换行符保存内容至列表
>>> f.seek(0)
0
# 全部放在列表中
>>> f.readlines()
['1,2,3abc\n', 'ABC\n', 'DEF']
>>> f.seek(0)
0
#对列表可做进一步操作
>>> f.readlines()[0]
'1,2,3abc\n'
  1. readable 文件是否可读,可读返回True,否则返回False
>>> f = open('test.txt','r+')
>>> f.readable()
True
>>> f.close()
>>> f = open('test.txt','a')
>>> f.readable()
False
  1. write 写内容(字符串)
>>> f.write('balbalbalallla')
14
>>> f.seek(0)
0
>>> f.read()
'1,2,3abc\nABC\nDEFbalbalbalallla'
  1. writelines 写内容,(列表)
#写入字符串,也OK
>>> f.writelines('这是啥我也不知道')
>>> f.tell()
>>> f.read()
''
>>> f.seek(0)
>>> f.read()

'1,2,3abc\nABC\nDEFbalbalbalallla这是啥我也不知道'
# write写字符串也ok
>>> s1 = 'daniel'
>>> f.write(s1)
>>> f.writelines(s1)
>>> f.seek(0)
>>> f.read()
'1,2,3abc\nABC\nDEFbalbalbalallla这是啥我也不知道danieldaniel'
#来试下列表
>>> l1 = ['i','am','is','supperman']
# write失败
>>> f.write(l1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be str, not list
# writelines没问题
>>> f.writelines(l1)
>>> f.seek(0)
>>> f.readlines()
['1,2,3abc\n', 'ABC\n', 'DEFbalbalbalallla这是啥我也不知道danieldanieliamissupperman']
>>> f.seek(0)
>>> f.read()
'1,2,3abc\nABC\nDEFbalbalbalallla这是啥我也不知道danieldanieliamissupperman'

#来试下元组
>>> t1 = ('a','b','c','d')
>>> f.write(t1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be str, not tuple
# writelines 是ok的
>>> f.writelines(t1)
>>> f.seek(0)
>>> f.read()
'1,2,3abc\nABC\nDEFbalbalbalallla这是啥我也不知道danieldanieliamissuppermanabcd'

#测试下字典
>>> d1 = {'k1':'v1','k2':'v2'}
>>> f.write(d1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be str, not dict
# writelines 还是ok的
>>> f.writelines(d1)
>>> f.seek(0)
>>> f.read()
'1,2,3abc\nABC\nDEFbalbalbalallla这是啥我也不知道danieldanieliamissuppermanabcdk1k2'
  1. writable 是否可写,可写返回True,否则返回False
>>> f.writable()
True
  1. tell 返回当前指针位置
>>> f.tell()
0
  1. seek 移动指针位置
>>> f.read()
'1,2,3abc\nABC\nDEF'
>>> f.seek(3)
3
>>> f.read()
',3abc\nABC\nDEF'
  1. seekable 指针是否可读,是: True, 否:False, Python3新增
>>> f.seekable()
True
  1. fileno 返回一个文件的文件描述符,可以用在os模块的read方法等一些底层的操作
>>> f.fileno()
3
  1. isatty 判断文件是否连接在一个终端设备,是:true,否:False
>>> f.isatty()
False
  1. truncate 截断文件,截取的字节通过参数提供,默认为当前指针位置
>>> f.tell()
0
#看下所有文件内容
>>> f.read()
'1,2,3abc\nABC\nDEFbalbalbalallla这是啥我也不知道danieldanieliamissuppermanabcdk1k2'
#再把指针指向开始位置
>>> f.seek(0)
0
# 截取三个字符
>>> f.truncate(3)
3
#查看文件指针
>>> f.tell()
0
# 查看文件
>>> f.read()
'1,2'
>>> f.read()
''
>>> f.seek(0)
0
>>> f.read()
'1,2'
>>> f.seek(0)
0
#如果不提供参数,从当前默认的指针位置开始截取,当前为开始位置,所以清空文件内容
>>> f.truncate()
0
>>> f.read()
''
>>> f.seek(0)
0
>>> f.read()
  1. flush 刷写文件内部缓存,直接把缓冲区的数据立即写入文件,而不是被动的等待缓冲区写入。
>>> f.flush()

四、管理上下文

上面的文件操作,打开操作完成之后每次都需要关闭文件,为了避免忘记,可以通过(with)管理上下文:

'''
打开test.txt文件以r+模式,并别名为f,操作完成后内部会自动关闭并释放文件资源
'''
with open('test.txt','r+') as f:   
    pass

另外在python2.7以后,with也支持同事打开两个文件来操作:

with open('test.txt','r') as f1, open('test2.txt','w') as f2:   
     pass

相关文章

  • 6. python文件操作

    一、 简述 在Python3里提供了open函数来对文件操作,Python2中有file函数 。 二、打开文件的模...

  • 14.Python之文件操作

    Python之文件操作 文件操作通过Python中的内置函数open()对文件进行操作。文件操作需要如下几个参数:...

  • 第二节课:Python 操作文件 ——软件测试派

    学习目标:掌握 python 操作文件 python 提供内置函数 open()实现对文件的操作。 python ...

  • 6. 文件操作

    [TOC] 文件处理 流程 打开文件open()f = open(filename,mode = '') 操作文件...

  • Python遍历目录并操作文件

    今天来使用python操作文件,包括根据模式查找文件、删除文件操作。 完整代码托管在python/find...

  • 解析Python中的文件操作

    1.简介 在Python中无需引入额外的模块来进行文件操作,Python拥有内置的文件操作函数(除了内置文件操作函...

  • 6. Python 文件

    文件 Python能够以文本和二进制两种方式处理 文件概述 文件是一个储存在辅助存储器上的数据序列,可以包含任何数...

  • Python 文件操作

    一. Python 读写 创建文件 Python中对文件,文件夹(文件操作函数)的操作需要涉及到OS 模块和 sh...

  • Python

    Python 创建文件 Python 对数据库进行操作--增删改查 Python 对csv进行操作 Python ...

  • python常用文件操作总结

    python 移动文件或文件夹操作。python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法...

网友评论

    本文标题:6. python文件操作

    本文链接:https://www.haomeiwen.com/subject/ckbprqtx.html