文件的编码
由于我们的电脑并不认识文字什么的,它仅仅只认识0和1,所以我们写入的文件都会经过一个编码成0和1的过程。
编码:翻译的规则,记录了如何将内容翻译成2进制数,以及如何将2进制数转回可识别的内容。
计算机中常见的编码:UTF-8 、GBK 、Big5等等 ,每一种不同的翻译规则也会导致每一种内容翻译成的二进制都不一样。对于常见的电脑来说,我们使用的都是UTF-8。
文件的读取
我们一般对文件的操作可以分成以下这三步骤:
- 打开文件。
- 读写文件。
- 关闭文件。
打开文件open()
而在Python当中,我们可以使用open函数进行打开一个已经存在的文件,或者创建一个新的文件,基本语法:
open(name,mode,encoding)
- name是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
- mode 是设置打开文件的具体访问模式:只读,写入,追加等等。
- encoding 编码格式,这里推荐使用UTF-8
常见的三种访问形式:
模式 | 描述 |
---|---|
r | 以只读的形式打开文件。文件的指针将会停留在文件的开头,这是默认形式。 |
w | 打开一个文件,只用于写入,如果文件存在,就打开该文件,并从开头开始编辑,如果文件不存在,就创建一个新文件,进行编辑。 |
a | 打开一个文件,用于追加,如果文件存在,就打开该文件,并从文件末尾开始编辑,如果文件不存在,就创建一个新文件,进行编辑。 |
样例:
f = open('D:/python/learnpython/Python.txt','r',encoding='UTF-8')
print(type(f))
输出结果:
值得关注的是f是一个对象,文件对象通过type的输出可得。
读取文件
对于读取文件中的数据,有四种方法:
第一种:read()
文件对象.read(number)
number代表着要从文件中读取number字节长度的数据,如果没有传入number,那么读取的就是文件中的所有数据。
样例:
f = open('D:/python/learnpython/Python.txt','r',encoding='UTF-8')
print(f"读取10字节的数据是:{f.read(10)}")
f.close()
f = open('D:/python/learnpython/Python.txt','r',encoding='UTF-8')
print(f"读取全部的内容是:{f.read()}")
f.close()
输出结果:
值得关注的是,为什么在第二次print的时候要先把文件关闭呢?原因是我们不关闭的话,读取将会从第11个元素开始读取,而非从头开始读取,因为指针移动的缘故。
第二种:readlines()
文件对象.readlines()
readlines()按照行的方式把整个文件一次性读取出来,返回一个列表,这个列表的每一个元素对应的就是文件中的每一行。
样例:
f = open('D:/python/learnpython/Python.txt','r',encoding='UTF-8')
f_list = f.readlines()
print(f"读取的内容是{f_list}")
print(f"读取内容的第二行是:{f_list[1]}")
输出结果:
第三种:readline()
文件对象.readline()
一次读取一行。
样例:
f = open('D:/python/learnpython/Python.txt','r',encoding='UTF-8')
f_hang = f.readline()
print(f_hang)
输出结果:
第四种:for
for 变量 in 文件对象:
statement
实际上就是拿变量去一行一行读取文件对象。
样例:
f = open('D:/python/learnpython/Python.txt','r',encoding='UTF-8')
for f_line in f :
print(f_line,end='')
输出结果:
文件的关闭close
基本语法:
文件对象.close()
基本上是最后通过close关闭文件,关闭对于文件的占用。
with-open的写法
实际上with-open的写法就是自动帮助你close的写法,他和正常写法也没有太大的差别
语法:
with open(name,mode,encoding) as 文件对象 :
statement
样例:
with open("D:/python/learnpython/Python.txt","r",encoding="UTF-8") as f :
for line in f :
print(line,end='')
输出结果:
文件的写入
对于文件的写入,我们分成以下步骤:
- 打开文件
- 文件写入
- 内容刷新
- 关闭文件
经由上面小节的学习,我们仅需要多学习两个函数即可完成这种行为
write函数与flush函数
文件写入:
文件对象.write(字符串)
文件刷新:
文件对象.flush()
值得注意的是:
- 直接调用write,内容并未被真正写入文件当中,而是被写道一个叫缓冲区的地方。
- 当调用flush函数的时候,才真正写入文件当中。
- flush函数的功能是避免频繁的操作硬盘,导致效率降低(所作的行为就是,攒一堆,再传入文件)。
- == 值得注意的是close函数内置了flush函数,所以也可以使用close进行节省操作。==
样例:
f = open("D:/python/learnpython/Python.txt",'w',encoding="UTF-8")
f.write("hello world")
f.flush()
f.close()
文件的追加
对于文件的写入,我们分成以下步骤:
- 打开文件
- 文件写入
- 内容刷新
- 关闭文件
所以值得改变的就只有‘w’改成‘a’
a模式,打开一个文件,用于追加,如果文件存在,就打开该文件,并从文件末尾开始编辑,如果文件不存在,就创建一个新文件,进行编辑。
剩下的其实和w模式差不多,就不赘述了。
总结
mode模式总结:
模式 | 描述 |
---|---|
r | 以只读的形式打开文件。文件的指针将会停留在文件的开头,这是默认形式。 |
w | 打开一个文件,只用于写入,如果文件存在,就打开该文件,并清空文件,从开头开始编辑,如果文件不存在,就创建一个新文件,进行编辑。 |
a | 打开一个文件,用于追加,如果文件存在,就打开该文件,并从文件末尾开始编辑,如果文件不存在,就创建一个新文件,进行编辑。 |
文件的基本操作:
操作 | 功能 |
---|---|
文件对象=open(name,mode,encoding) | 打开文件获得文件对象 |
文件对象.read(num) | 读取指定字节长度的数据流,不指定num就是读取文件全部 |
文件对象.readlines() | 读取全部行,得到列表,列表每一个元素为一行 |
文件对象.readline() | 读取一行 |
for i in 文件对象 | for循环,每次循环读取一行 |
文件对象.close() | 关闭文件对象 |
with open(name,mode,encoding) as 文件对象 | 通过with-open语法打开文件,文件自动关闭 |
文件对象.write(字符串) | 写入缓冲区 |
文件对象.flush() | 写入文件 |