文件对象的读写操作
-
文件的读写操作
文件模式 操作 r 以读方式打开 w 以写的方式打开(必要时清空) a 以追加的模式打开(必要时创建新文件) r+ 以读写模式打开 w+ 以读写模式打开 a+ 以读写模式打开 rb 以二进制读模式打开 wb 以二进制写模式打开 ab 以二进制追加模式打开 rb+ 以二进制读写模式打开 wb+ 以二进制读写模式打开 ab+ 以二进制读写模式打开 -
w+、r+的区别
- r+:可读可写,若文件不存在,报错;
- w+:可读可写,若文件不存在,创建;
-
a、a+、w、w+
- a、w打开文件没有读取功能;
- a、a+、w、w+若不存在会创建新文件;
- a:附加写方式打开;a+:附加读写方式打开;
-
文件的写
- 写需要注意访问模式,到底操作的是字节还是字符
- 路径如果不指定,默认与python解析器的路径一致
- 文件的分类
- 纯文本(解码utf-8,w)
- 非纯文本(二进制字节,wb)
- 如果文件不存在,新建.如果文件存在,清空原来的内容,再写入新的内容.
-
文件的读
- f.read():----->读取文件里面所有的内容,并返回
- readlines(n):------->一次读取文件的全部内容,并按行放回list
- readline(n):------>最多读取n个字节的内容(也是一行一行的读)
- flush:----------->将内存的东西刷到硬盘中
文件夹操作的时候w模式会覆盖原来的文件(因此原来的文件会消失,要特别注意);文件操作的时候w、w+模式写入的内容会覆盖原来的内容,也要特别注意
-
打开文件格式
-
f=open('路径/文件名', '读写格式', '编码方式', '错误处理方式')
- 打开文件之后必须要执行关闭文件的操作
- eg:f=open('/Users/noiccy/Desktop/PythonCode/test.txt','r', encoding='UTF-8', errors='ignore')
- 使用with语句,python可以自动调用close()方法
-
f=open('路径/文件名', '读写格式', '编码方式', '错误处理方式')
-
常见文件对象方法
文件对象方法 操作 file.close() 关闭文件 file.flush() 刷新文件的内存缓冲区 file.read(size=-1) 读取文件的内容,可以指定读取的长度;如果长度小于1,读取文件全部的内容 file.readline(size=-1) 从文件中读取并返回一行;一般模式下是一行一行的读取,换行符单独算一行 file.readlines(sizhint=0) 读取文件的所有行为作为一个列表返回(包含所有的行结束符):如果给定sizhint且大于0,那么将返回总和大约为sizhint字节的行 file.wirte(str) 写入文件,返回当前在文件中的位置 file.writelines(seq) 向文件写入字符串序列seq:seq应该是一个返回字符串的可迭代对象 file.next() 返回文件的下一行(类似于file.readline()),或在没有其他行时引发StopIteration异常 file.seek(0,0) 重新指向文件的头部;seek(xx,1)中0代表从文件开头算起1,1代表从当前的位置算起,2代表从文件的末尾算起 file.tell() 返回光标在当前文件夹中的位置 -
文件的内置属性
文件对象的内置属性 描述 file.closed 表示文件已经被关闭,否则为False file.mode 文件打开时使用的访问方式 file.name 文件名
# 第一种读写文件的方式,不常使用了
# 文件打开之后必须要有关闭文件的操作
In [1]: f = open('./test.txt','r+')
In [2]: f.read()
Out[2]: '#coding=utf-8\n\nthis is a file\naaaaaaa\nbbbbbbb\nccccccc\niiabcdedfabcdefgi\n'
In [22]: f.read(10)
Out[22]: '#coding=ut'
In [3]: f.write('python')
In [5]: f.seek(0,0) # 重新指向文件的头部
In [6]: f.read()
Out[6]: '#coding=utf-8\n\nthis is a file\naaaaaaa\nbbbbbbb\nccccccc\niiabcdedfabcdefgi\npython'
In [7]: f.seek(0,0)
In [8]: f.readline() # 从文件中读写并返回一行 一般模式下是一行一行的读取,换行符单独算一行
Out[8]: '#coding=utf-8\n'
In [9]: f.readlines(2) # 读取文件所有的行为作为一个列表返回
Out[9]:
['\n',
'this is a file\n',
'aaaaaaa\n',
'bbbbbbb\n',
'ccccccc\n',
'iiabcdedfabcdefgi\n',
'python']
In [10]: f.mode # 文件打开时的访问方式
Out[10]: 'r+'
In [11]: f.name
Out[11]: './test.txt'
In [12]: f.close()
# 把列表或者字典写入到文件中
In [1]: list1 = ['apple','python']
In [2]: file1 = open('./ccc.txt','w+')
In [3]: file1.write(str(list1))
In [4]: file1.tell()
Out[4]: 19
In [5]: file1.seek(0)
In [6]: file1.read()
Out[6]: "['apple', 'python']"
# 把一个文件的内容写入到另一个文件中
with open('file1.txt','r') as f1:
with open('file2.txt','w') as f2:
f2.write(f1.read())
# 第二种读写文件的方式,经常使用
# 文件打开之后不必执行关闭的操作
In [27]: with open('./test.txt', 'r+') as e:
...: line = e.read(20)
...: lines = e.readlines()
...: write = e.write('python')
...:
In [28]: print line
#coding=utf-8
this
In [29]: print lines
['is a file\n', 'aaaaaaa\n', 'bbbbbbb\n', 'ccccccc\n', 'iiabcdedfabcdefgi\n', 'python']