Python——第六章 文件操作

    技术2026-02-18  12

    6.1文件的使用

    文件的两种类型:文本文件和二进制文件 文本文件:由单一特定编码的字符组成 例如:txt文件 二进制文件:二进制文件直接由比特0和比特1组成,文件内部数据组织格式与文件用途有关。例如:视频、图片 Python操作文件的流程: 打开文件→读取文件内容→写入文件内容→删除文件内容→修改文件内容→关闭文件

    6.1.1文件的打开和关闭

    内置函数open()可以用指定模式打开指定文件并创建文件 注:路径中由于\是转义符,所以表示路径时,使用\或

    F=open("D:\Python\A.txt",'r') print(F.readline()) F=open("D:\Python\B.txt",'w') #创建文本文件[如果文件不存在],覆盖文件[如果文件存在] F=open("D:\Python\A.txt",'w') #覆盖A文件(A文件被清空) #F=open("D:\Python\A.txt",'x') #若文件不存在使用X可以创建,若文件存在使用X会报错 F=open("D:\Python\A.txt",'a') #覆盖A文件(A文件被清空) F.write("人工智能A") F=open("D:\Python\A.txt",'rb') #转换成二进制读取 print(F.readline()) F=open("D:\Python\B.txt",'r+') #创建文本文件[如果文件不存在],覆盖文件[如果文件存在] F.write("人工智能B") #文本文件B中已经存在“人工智能B” F=open("D:\Python\B.txt",'r') print(F.readline()) F.close()

    运行结果如下:

    6.2文件的读写

    6.2.1文件的读取

    f.read(size=-1):从文件中读入整个文件的内容 参数可选,如果给出则读入前size长度的字符串或字节流。其结果是一个字符串。

    f=open("D:\Python\A.txt",'r', encoding="utf-8") #中文读取需要添加 encoding="utf-8" a=f.read() print(a) #绝对路径:D:\Python\A.txt 相对路径:在程序文件下的路径A.txt(在这里是指在D盘下Python文件下的0613文件下的A.txt) #此时就可以修改成F=open("A.txt",'r') f=open("A.txt",'r', encoding="utf-8") #中文读取需要添加 encoding="utf-8" a=f.read() print(a) f=open("A.txt",'r', encoding="utf-8") #中文读取需要添加 encoding="utf-8" b=f.read(10) print(b) f.close()

    运行结果如下:

    f.readline(size=-1):从文件中读入一行的内容 参数可选,如果给出,读入该行前size长度的字符串或字节流。其结果是一个字符串。

    f=open("A.txt",'r', encoding="utf-8") #中文读取需要添加 encoding="utf-8" a=f.readline() print(a) #继续读取下一行的话 b=f.readline() print(b) f.close() f=open("A.txt",'r', encoding="utf-8") #中文读取需要添加 encoding="utf-8" a=f.readline(9) print(a) #如果上一行未读取结束,继续读取下一行的话,读取从上一行结束位置开始,到上一行行末尾。 b=f.readline() print(b) f.close()

    运行结果如下:

    f.readlines(hint=-1):从文件中读入所有行,以每行为元素形成一个列表。 参数可选,如果给出读入hint行。文件打开后,对文件的读写有一个读取指针,当文件中读入内容后,读取指针将向前进,再次读取的内容将从指针的新的位置开始。

    f=open("A.txt",'r', encoding="utf-8") #中文读取需要添加 encoding="utf-8" b=f.readlines(1) #如果只读取一行就把参数定为1.全部读取参数置空即可。 print(b) f.close()

    运行结果如下:

    f.seek(offset):改变当前文件操作指针的位置。 offset的值: 0:文件开头;2:文件结尾。

    f=open("A.txt",'r', encoding="utf-8") #中文读取需要添加 encoding="utf-8" a=f.readlines() print(a) b=f.read() #这是因为读取指针读取到了文件末尾,所以b读取不出任何值 print(b) f.close()

    运行结果: 可以发现b参数是未读取到任何值的,这是因为读取指针读取到了文件末尾,所以b读取不出任何值。所以需要加入函数seek,使指针回到文件初始位置

    f=open("A.txt",'r', encoding="utf-8") #中文读取需要添加 encoding="utf-8" a=f.readlines() print(a) f.seek(0) #使指针回归到文件初始位置。 b=f.read() #这是因为读取指针读取到了文件末尾,所以b读取不出任何值 print(b) f.close()

    运行结果如下: 文件的循环读取 可以使用遍历循环逐行遍历文件

    f=open("A.txt",'r', encoding="utf-8") #中文读取需要添加 encoding="utf-8" for line in f: print(line) f.close()

    6.2.2文件的写入

    f.write(s):向文件中写入字符串s,每次写入后,将会记录一个写入指针,该方法可以反复调用,将在写入指针后分批写入内容,直至文件被关闭。

    f=open("B.txt",'w') #中文读取需要添加 encoding="utf-8" f.write("俯首南枝百日枯,半坡古木半坡丛。\n") f.write("愿守禅道千年湖,一朝菩提一朝荣。") f.close()

    f.writelines(lines):直接将列表类型的各个元素连接起来写入文件f。

    ls=['俯首南枝百日枯','半坡古木半坡丛\n'\ '愿守禅道千年湖','一朝菩提一朝荣。\n'\ '【表格写入】']#'\'可以用来连接 f=open("B.txt",'w') #中文读取需要添加 encoding="utf-8" f.writelines(ls) f.close()

    6.3数据的维度

    根据数据的关系不同,数据组织可以分为:一维数据、二维数据、和高维数据。 一维数据的存储方式

    ls=['北京','广州','上海','天津','重庆'] f=open("city.txt",'w') #中文读取需要添加 encoding="utf-8" a=','.join(ls) print(a,type(a)) f.write(",".join(ls)) f.close() #join函数 #将序列中的元素以指定的字符连接生成一个新的字符串

    运行结果如下: CSV格式

    #创建CSV文件 ls=['北京','广州','上海','天津','重庆'] f=open("city.csv",'w') #中文读取需要添加 encoding="utf-8" f.write(",".join(ls)) f.close() #从CSV文件中进行读取 f=open("city.csv",'r') ls=f.read() ls_new=ls.split(',') #split()函数通过指定分隔符对字符串进行切片,返回列表。 f.close() print(ls_new)

    运行结果如下: 生成了csv文件 从CSV文件中成功读取 二维数据的存储方式

    ls=[['指标','2014年','2015年','2016年'],['居民消费价格指数','102','101.4','102'], ['食品','102','103.1','101.4'], ['烟酒及用品','994','102.1','101.5'], ['衣着','102.3','102.7','100.5']] f=open("cpi.csv",'w') for row in ls: f.write(",".join(row)+ "\n") f.close()

    运行结果如下: 读取二维数据

    f=open("cpi.csv",'r') ls=[] for line in f: a=line.strip('\n') print(a) b=a.split(',') print(b) ls.append(b) f.close() print(ls)

    等价于代码:

    f=open("cpi.csv",'r') ls=[] for line in f: ls.append(line.strip('\n').split(',')) f.close() print(ls)

    运行结果如下:

    Processed: 0.010, SQL: 9