python文件操作详解
- 2020 年 1 月 6 日
- 筆記
文件操作是编程中必不可少的,配置文件,数据存储都是对文件操作;按文件操作与格式主要内容如下图:

文件基本操作为打开,读取,写入,关闭,我们按这个过程来详解讲解。
1.一个例子搞定打开,读取与关闭:
准备工作:
1>新建文件:E:workdirreadme.txt(或者自己准备一个其他文本文件); 2>文件添加一行内容:this is test
直接上代码,有个基本认识:
#文件路径 path = r'E:workdirreadme.txt' #打开文件 f = open(path) #读取文件 txt = f.read() print(txt) #关闭文件 f.close()
输出结果:this is test; 感觉文件操作太简单了。
那么问题来了:如果文件不存在如何创建文件?如何写文件?这种方式能够写入吗? 我们来看文件打开方式。
2 文件打开方式详解:
2.1 open方法详解:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
返回一个文件IO对象,如果文件不存在或者打开出错触发异常; 主要参数:
参数 |
说明 |
---|---|
file |
文件路径 |
mode |
打开方式,默认只读方式 |
encoding |
打开文件编码格式 |
其他参数暂时使用默认值。
我们再来看下文件打开方式: |
打开方式 |
说明 |
---|---|---|
'r' |
只读方式 ,不能写入 |
|
'w' |
只写方式打开,文件不存在创建文件,文件存在截断文件 |
|
'a' |
只写方式打开,如果文件存在,再文件尾部开始写入 |
|
'+' |
读写方式打开 |
|
'b' |
二进制方式打开,例如图片; 'rb','wb','ab',上面操作类似 |
2.2 打开方式测试:
工作目录:'E:workdir';
case1:文件不存在创建文件:
#该文件不存在 wfpath = r'E:workdirtestw.txt' f = open(wfpath, 'w') #写入一行 f.write('python') f.close()
查看E:workdir,创建文件testw.txt;
case2:文件存在只写方式打开:
准备工作: 1>在'E:workdir'下创建文件:test1.txt; 2>写入一行文本:'abcd1234';
测试:
#文件存在 fpath = r'E:workdirtest1.txt' f = open(fpath, 'w') f.close()
查看r'E:workdirtest1.txt',内容被清空;
case3:只写方式打开,能否读取:
fpath = r'E:workdirtest1.txt' #文件只写方式打开 f = open(fpath, 'w') #进行读取 f.read() f.close()
结果:
UnsupportedOperation Traceback (most recent call last) <ipython-input-13-30cd4bdc05f3> in <module> 3 fpath = r'E:workdirtest1.txt' 4 f = open(fpath, 'w') ----> 5 f.read() 6 f.close() UnsupportedOperation: not readable
只写方式打开不能读取。
case4:只写方式打开,尾部开始写入:
使用'w'方式打开文件,文件会被裁剪,如何在尾部追加数据?使用'a'模式:
#先写入abc,关闭重新打开文件,在写入123 fpath = r'E:workdirtesta.txt' #只写方式打开 f = open(fpath, 'w') f.write('abc') f.close() #追加方式打开,文件尾开始写入 fpath = r'E:workdirtesta.txt' f = open(fpath, 'a') f.write('123') f.close()
文件内容:abc123;
cast5:读写方式打开:
模式 |
说明 |
---|---|
'r+' |
读写方式打开,从文件头开始读写 |
'w+' |
读写方式打开,文件被清空 |
'a+' |
追加方式读写打开,从文件尾开始读写 |
#文件路径,文件内容:'this is test' path = r'E:workdirreadme.txt' #打开文件 f = open(path, 'r+') line = f.read() print(line) #写入文本 f.write('end') #关闭文件,文件尾写入end f.close()
结果:读取文件内容,并在文件尾插入end; 大家可以尝试测试另外两种读写模式。
3.文件读取
读取文件方法:
方法 |
说明 |
---|---|
read(size=-1, /) |
读取指定字节或者读取完成,默认读取完 |
readline(size=-1, /) |
读取一行 |
readlines(hint=-1, /) |
读取多行,默认读取完,返回每行组成列表 |
环境准备:readme.txt中添加四行:
1:语法 2:环境 3:逻辑处理 4:数据结构
case1:一次读取完
path = r'E:workdirreadme.txt' f = open(path) lines = f.read() print(lines)
case2:逐行读取
path = r'E:workdirreadme.txt' f = open(path) while True: #读取完,读取内容为'' line = f.readline() if line: print(line, end='') else: break
case3:按行一次读完
path = r'E:workdirreadme.txt' f = open(path) lines = f.readlines() print(lines)
lines为列表;
case4:使用for循环逐行读取:
如果文件过大,一次读取会占用大量内存,所以一般情况下,我们使用for遍历文件:
path = r'E:workdirreadme.txt' f = open(path) for line in f: print(line, end='')
4.文件写入:
方法 |
说明 |
---|---|
write(text, /) |
写入字符串,返回写入字节数 |
writelines(lines, /) |
写入多行 |
实际操作:
#‘n’换行符 info = ['javan','c++n'] #只写方式打开文件 path = r'E:workdirtestw.txt' f = open(path,'w') #写入一行 f.write('python'+'n') #写入多行 f.writelines(info) f.close()
到这里文件基本操作我们就介绍完了,在专栏中我们再来看如何使用。