一、文件的打开和关闭
1.1 打开方式
1.2 文件的简单操作
1.3 打开文件的方式
二、按行读取文件的内容
演练:文件复制
open() #打开文件,并返回file对象
file.close()
file.read() #一次性读取整个文件
file.readlines() #一次性读取,放到一个列表中
file.readline() #读取一行
file.write()
file.tell() #返回文件当前的位置。
file.seek()
一、文件的打开和关闭
1.1 打开方式
方式一:
file = open("文件路径", "打开模式", encoding="字符编码")
...
file.colse()
方式二:
with open("文件路径", "打开模式", encoding = "字符编码") as f:
...
使用第二种方式的好处是,执行完毕后,自动对文件进行close操作。
编码方式默认是gbk,如果中文还是读不出来,可以试试:utf-8,
1.2 文件简单读写操作
file = open("README") #如果文件存在,返回文件操作对象;如果不存在,抛出异常。
text = file.read() #一次性读入并返回文件中的所有内容。【例1】
file.close() #如果忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的访问。
例1:

结果:

补充:文件指针。当执行了read()之后,文件指针就指向文件末尾了。再read()就读不了了。【例2】

例2:

结果:

1.3 Python打开文件的方式
前面学了file = open("aaa.txt"),没有传递第二个参数。这时候Python会默认以只读方式打开文件。这时候就只能读,不能写入数据。
"r" #只读。如果文件不存在,会报错。
“w” #只写。如果文件不存在,会创建。写的时候会覆盖,每次都从头写。【例2】。注意每次打开是从头写,在一次打开的过程内还是一直往后写的。【例3】
“a” #追加写。如果文件不存在,会创建。写的时候会从文件尾继续写。【例4】
“x” #创建写。如果不存在就创建。如果存在就报错。
关于“r+”、“w+”、“a+”等 有个印象就好。
"r+" :

“w+”

"a+"


例2:
首先看一下README中的内容:

然后编写test.py文件:

执行后:

文件内容改变了。
例3:
首先看一下README中的内容:

编写test.py:

结果:

例4:
首先看一下README中的内容:

然后编写test.py文件:

结果:

二、文件读取操作详解
read() #一次性读取所有内容
readlines() #一次性读取,放到一个列表中。
readline() #读取一行内容
2.1 read()
前面介绍过,这里详细介绍一下。
text = read() 一次性读取所有内容,并赋给一个字符串变量。
text = read(5) 读入指定的字节数。
2.2 readlines()
readlines() #一次性读取整个文件。每一行一个字符串,保存到一个列表中。
例:
aaa/abc.txt 内容如下:

读取:

结果:

2.3 readline()
read()和readlines()方法一次性会把所有的内容都读出来。如果文件太大,内存可能不够。
readline()方法,一次可以读取一行内容。当执行了readline()后,文件指针会移动到下一行,这样就可以再次读取了。【例1】
readline()方法写起来有点麻烦。而我们打开的文件,本身就是可迭代对象,我们可以每次迭代读取一行内容。【例2】

例1:
README内容为

test.py

结果:

如果不写end="",会再空一行。这是因为,读取的文件每一行的末尾本身有一个换行符。而print()语句如果不写end的话,默认有一个换行。所以会再空一行。
例2:

结果:

三、文件写入操作详解
3.1 write()
将字符串写入到文件中。
例1:写之前文件为:

覆盖写:

结果:

3.2 writelines()
将列表中存储的字符串写入文件中。
例:

结果:

四、演练:文件拷贝
情况(1):如果文件较小,一次性可以读入

情况(2):如果文件较大,需要一行一行读入

其中,第二行 也可以写成“w”也没问题。因为后面的循环并没有关闭文件,所以写到哪里,文件指针就指在哪里,并不是从头开始写。
|