python文件操作详解

文件操作是编程中必不可少的,配置文件,数据存储都是对文件操作;按文件操作与格式主要内容如下图:

文件基本操作为打开,读取,写入,关闭,我们按这个过程来详解讲解。

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()

到这里文件基本操作我们就介绍完了,在专栏中我们再来看如何使用。