一、文件的使用
1.1 文件的类型
- 文件的两种类型
①文本文件:由单一特定编码的字符组成。例如TXT文件
②二进制文件:二进制文件直接由0和1组成,文件内部数据的组织格式与文件用途有关。例如视频、图片。
Python对文本文件和二进制文件都有统一的操作步骤,即“打开-操作-关闭”
1.2 文件的打开
内置函数open()可以用指定模式打开指定文件并创建文件
使用方法:变量名=open(文件路径及文件名,打开模式)
注:路径中由于\是转义符,需要改为\或/,另外路径有绝对路径和相对路径。例如D:\\program\\a.txt
为绝对路径,直接指向文件所在地址。而只写a.txt
的话,就是相对路径,程序会在编译器所在的地址查找a.txt文件。
- a模式示例
此时a.txt中只有Python字样
运行以下代码
f=open('D:\\a.txt','a')
f.write('是世界上最好的语言')
f.close()
a.txt变成如下字样
- b模式和t模式
Python默认为文本文件模式,也就是默认打开的是文本文件
也就是说f=open('D:\\a.txt','a')
等价于f=open('D:\\a.txt','at')
当需要以二进制方式打开文件,需要加b模式,如下
f=open('D:\\a.txt','rb')
print(f.readline())
#输出
b'Python\xca\xc7\xca\xc0\xbd\xe7\xc9\xcf\xd7\xee\xba\xc3\xb5\xc4\xd3\xef\xd1\xd4'
- +模式
+模式可以增加读写功能 - 文件的关闭
文件使用结束后要用close()函数进行关闭,释放文件的使用授权
1.3 文件的读写
1.3.1 文件的读取
- read()
f.read(size=-1):从文件中读入整个文件内容。参数可选,如果给出则读入前size长度的字符串或字符流。其结果是一个字符串。
#直接输出
f=open('D:\\a.txt','r')
print(f)
--输出
<_io.TextIOWrapper name='D:\\a.txt' mode='r' encoding='cp936'>#若直接输出f,内容则为文件名和信息
#使用read()函数输出
f=open('D:\\a.txt','r')
print(f.read(10))
--输出
Python是世界上#输出前10个字符
- readline()和readlines()
①f.readline(size=-1):从文件中读入一行内容。参数可选,如果给出则读入该行前size长度的字符串或字符流。其结果是一个字符串。
②f.readlines(hint=-1):从文件中读入所有行,以每行为元素形成一个列表。参数可选,如给出,读入hint行。
注:文件打开后,对文件的读写有一个读取指针,当文件中读入内容后,读取指针将向前进。若不关闭文件后重新读取,下一次读取的内容将从指针的新位置开始。
#readline()读取
f=open('D:\\a.txt','r')
print(f.readline())
print(f.readline())#第二次readline(),继续读取第二行。
--输出
L1:Python是世界上最好的语言
L2:Python是世界上最好的语言
#readlines读取
f=open('D:\\a.txt','r')
print(f.readlines())
print(f.read())#第一次读取时,文件已被读取完,因此第二次读取将返回空值
--输出
['L1:Python是世界上最好的语言\n', 'L2:Python是世界上最好的语言']
[]
- seek()
若需要多次读取过程中,每次读取都从文件开头读取,可以使用f.seek(offset):改变当前文件操作指针的位置,offset的值:0为文件开头;2为文件结尾
f=open('D:\\a.txt','r')
print(f.readlines())
f.seek(0)#使用seek改变指针位置至文件开头
print(f.read())
--输出
['L1:Python是世界上最好的语言\n', 'L2:Python是世界上最好的语言']
L1:Python是世界上最好的语言
L2:Python是世界上最好的语言
- 遍历读取
从文本文件中逐行读入内容并进行处理是一个基本的文件操作需求。文本文件可看成是由行组成的组合类型,因此,可以使用遍历循环逐行遍历文件。
f=open('D:\\a.txt','r')
for line in f: #此时的f相当于一个以每行文本作为元素的列表
print(line,end='')
--输出
L1:Python是世界上最好的语言
L2:Python是世界上最好的语言
1.3.2 文件的写入
- write()
f.write(s):向文件写入字符串s,每次写入后,将会记录一个写入指针。该方法可以反复调用,将在写入指针后分批写入内容,直至文件被关闭。
f=open('a.txt','w')#在相对路径下创建一个a.txt文件
f.write('L1:Python\n')
f.write('L2:Python')#写入两行数据
f.close()#关闭
a=open('a.txt','r')
print(a.read())#读取a文件
--输出
L1:Python
L2:Python
- writelines()
f.writelines(lines)可以直接将列表类型的lines的各元素连接起来写入文件f
line=['L11:Python\n',
'L22:Python']
f=open('a.txt','w')
f.writelines(line)#将line列表写入f
f.close()
a=open('a.txt','r')
print(a.read())
--输出
L11:Python
L22:Python
二、数据的维度
2.1 三种维度
根据数据的关系不同,数据组织可以分为:一维数据、二维数据和高维数据。
- 二维数据
也称表格数据,由关联关系数据构成,采用二维表格方式组织,对应于数学中的矩阵,常见的表格都属于二维数据。
- 高维数据
由键值对类型的数据构成,采用对象方式组织,可以多层嵌套
2.2 存储方式
2.2.1 一维数据的存储方式
表示方式:一维数据在Python中主要采用列表形式表示。
存储方式:总体思路是采用特殊字符分隔各数据。
常用的存储方式:如下
可以使用write(分隔符,join(列表))
的方式将列表数据写入文件。
line=['北京','上海','重庆']
f=open('D:\\a.txt','w')
f.write(','.join(line))#将line使用join函数写入文件,并以,分隔
f.close()
a=open('D:\\a.txt','r')
print(a.read())
--输出
北京,上海,重庆
2.2.2 CSV存储格式(逗号分隔值)
一种通用的、相对简单的文件格式。存储的文件一版采用.csv为扩展名。一维数据保存为csv格式后,各元素采用逗号分隔,形成一行,在这里的逗号是英文逗号。
将csv文件还原为数据,可以使用split函数进行切割
示例
#csv文件的写入
line = ['北京', '上海', '重庆']
f = open('D:\\a.csv', 'w+')#采用w模式,及+模式使其可读写操作
f.write(','.join(line))#使用join函数以,分隔写入f
f.seek(0)#为继续读取操作,将指针移到文件开头
#csv文件读取为列表
ls=f.read().split(',')#读取文件并以,切片
print(ls)
f.close()
--输出
['北京', '上海', '重庆']
2.2.3 二维数据的存储方式
表示方式:二维数据由多个一维数据组成,可以看做是一维数据的组合形式。因此二维数据可以采用二维列表来表示,即列表的每个元素对应二维数据的一行
存储方式:用csv格式文件存储,csv文件的每一行是一维数据,整个csv文件是一个二维数据
- 二维列表存储至csv
ls = [['城市', '年份', '省份'],
['济南', '1989', '山东'],
['成都', '1967', '四川'], ]
f=open('D:\\a.csv','w')
for i in ls:
f.write(','.join(i)+'\n')#\n的作用是换行
f.close()
输出的文件:
- csv转化为二维列表
f=open('D:\\a.csv','r')#读取刚才的csv文件
ls=[]#创建空列表
for line in f:#读取f二维列表中的每一行
ls.append(line.strip('\n').split(','))#strip将每行的\换行符去掉,split将每行按照','分隔形成一维列表,并使用append将该一维列表添加到ls里面
f.close()
print(ls)
--输出
[['城市', '年份', '省份'], ['济南', '1989', '山东'], ['成都', '1967', '四川']]