1 、对文件的理解
- 文件式存储在辅助存储器上的数据序列
- 文件式数据存储的一种形式
- 文件展现形态:文本文件和二进制文件(本质上所有文件都是二进制形式存储,形式上所有文件都采用两种方式展示)
文件是数据的抽象和集合。
2、文本文件
- 由单一特定编码组成的文件,如UTF-8编码
- 由于存在编码,也被看成是存储着的长字符串
- 适用于例如:.txt文件,.py文件等
3、二进制文件
- 直接用比特0和1组成,没有统一字符编码
- 一般存在二进制0和1的组织结构,即文件格式
- 适用于例如:.png文件、.avi文件等
4 、文件的的打开和关闭
<变量名>(文件的句柄) = open(<文件名>(文件路径和名称,源文件同目录可省路径),<打开模式>(文本or二进制||读or写))
在用绝对路径的时候,本来应该为D:\Python,但是由于\在python中为转义字符,所以也可以用反斜杠,即:D:/Python 或者 D:\Python
w和x的区别在于,当文件存在的时候,w是直接全删除原有内容,直接写,而x则会发生异常
>>> f=open("f.txt") #文本形式,只读模式,默认值
>>> f=open("f.txt","rt") #文本形式,只读模式,同默认值
>>> f=open("f.txt","w") #文本形式,覆盖写模式
>>> f=open("f.txt","a+") #文本形式,追加写模式+读文件
>>> f=open("f.txt","x") #文本形式,创建写模式
>>> f=open("f.txt","b") #二进制形式,只读形式
>>> f=open("f.txt","wb") #二进制形式,覆盖写模式
文件的关闭使用:<变量名>.colse()
如果程序正常结束,文件最后也会自动关闭,但是最好还是写上
5、文件内容的读取
s = "你真的很棒"
<f>.read(size=-1) #读入全部内容,如果给出参数,读入前size长度
>>> s=f.read(2)
>你真
<f>.readline(size=-1) #读入一行内容,如果给出参数,读入该行前size长度
>>>s=f.readline()
>你真的很棒
<f>.readlines(hint=-1) #读入文件所有行,以每行为元素形成列表,如果给出参数,读入前hint行
>>>s=f.radlines()
>[你真的很棒] #返回的是一个列表类型
遍历全文本的四种方法
1)
fo=open("f.txt","r")
txt=fo.read() #对全文txt进行处理,一次读入,统一处理
fo.close()
2)
fo=open("f.txt","r")
txt = fo.read(2)
while txt != "": #按数量读入,逐步处理
txt=fo.read(2)
fo.close()
3)
fo=open("f.txt","r")
for line in fo.readlines(): #一次读入,分行处理
print(line)
fo.close()
4)
fo=open("f.txt","r")
for line in fo: #分行读入,逐行处理
print(line)
fo.close()
6、数据文件的写入
<f>.write(s) #向文件写入一个字符串或字节流
>>>f.write("你真的很棒")
<f>.writelines(lines) #将一个元素全为字符串的列表写入文件
>>>ls=["中国","法国","美国"]
>中国法国美国
<f>.seek(offset) #改变当前文件操作指针的位置,offset含义如下: 0-文件开头;1-当前位置;2-文件结尾
>>>f.seek(0) #回到文件开头
fo.open("f.txt","w+")
le=["中国","法国","美国"]
fo.writelines(ls)
for line in fo: #写入一个字符串列表
print(line)
fo.close()
!!!!没有任何输出
fo.open("f.txt","w+")
le=["中国","法国","美国"]
fo.writelines(ls)
fo.seek(0)
for line in fo: #写入一个字符串列表
print(line)
fo.close()
输出为:中国法国美国
因为,随着文件的输入,指针指向了最后输入结束的位置,所以第一个代码,是接着从该位置向后读取,所以没有任何输入,当回到文件开头后再向后读取时,即可输出成功。