由于我们的电脑并不认识文字什么的,它仅仅只认识0和1,所以我们写入的文件都会经过一个编码成0和1的过程。
编码:翻译的规则,记录了如何将内容翻译成2进制数,以及如何将2进制数转回可识别的内容。
计算机中常见的编码:UTF-8 、GBK 、Big5等等 ,每一种不同的翻译规则也会导致每一种内容翻译成的二进制都不一样。对于常见的电脑来说,我们使用的都是UTF-8。
我们一般对文件的操作可以分成以下这三步骤:
而在Python当中,我们可以使用open函数进行打开一个已经存在的文件,或者创建一个新的文件,基本语法:
open(name,mode,encoding)
常见的三种访问形式:
模式 | 描述 |
---|---|
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 变量 in 文件对象:
statement
实际上就是拿变量去一行一行读取文件对象。
样例:
f = open('D:/python/learnpython/Python.txt','r',encoding='UTF-8')
for f_line in f :
print(f_line,end='')
基本语法:
文件对象.close()
基本上是最后通过close关闭文件,关闭对于文件的占用。
实际上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()
值得注意的是:
样例:
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() | 写入文件 |