文件的使用
文件包含两种类型:文本文件和二进制文件
文本文件有UTF-8编码,内容容易显示和阅读。
二进制文件有0和1比特组成,没有统一的字符编码。
无论文件创建为那种格式,都可以用“文本文件格式”或“二进制格式”打开,打开后的操作有所不同。
python对于文件的操作——打开文件→读取/写入→关闭文件
f = open("a.txt","rb") # 以二进制文件的格式打开
print(f.readline())
f.close()
b'\xe6\x96\x87\xe6\x9c\xac\xe6\x96\x87\xe4\xbb\xb6\xe4\xb8\x8e\xe4\xba\x8c\xe8\xbf\x9b\xe5\x88\xb6\xe6\x96\x87\xe4\xbb\xb6'
f = open("a.txt","rt") # 以文本文件的格式打开
print(f.readline())
f.close()
文本文件与二进制文件
打开方式
打开方式 | 含义 |
---|---|
r | 只读,当文件不存在时,会报错 |
w | 覆盖写模式,当文件不存在时,会创建。当文件内容存在时,会完全覆盖。 |
x | 创建写模式,当文件不存在时会创建,当文件存在时,会报错 |
a | 追加写模式,当文件不存在时,会创建。当文件存在时,在原文件基础上追加 |
文件的读取
方法 | 含义 |
---|---|
f.read | 从文件中读取整个文件的内容 |
f.readline | 从文件中读取一行内容 |
f.readlines | 从文件中读取所有行,以每行元素形成一个列表 |
f.seek | 改变当前文件操作指针的位置,括号内值为2,表示文章末尾。值为0,表示文章开头 |
现以该文件来进行读取展示,
(1)
f = open('a.txt','rt')
print(f.read())
文本文件
二进制文件
文本文件与二进制文件
(2)
f = open('a.txt','rt')
print(f.readlines())
['文本文件\n', '二进制文件\n', '文本文件与二进制文件']
(3)
f = open('a.txt','rt')
print(f.readline())
文本文件
逐行读取内容并进行操作。
f = open('a.txt','rt')
f.seek(0)
for line in f:
print(line)
f.close()
文本文件
二进制文件
文本文件与二进制文件
文件打开后,对文件的读写有一个读取指针,当从文件中读入内容后,读取指针将向前进,再次读取的内容将从指针的新位置开始。
文件的写入
方法 | 含义 |
---|---|
f.write(s) | 向文件写入一个字符串 |
f.writelines(lines) | 将一个元素为字符串的列表写入文件 |
(1)
f = open('abc.txt','w')
f.write("文本文件\n")
f.write("二进制文件\n")
f.write("文本文件与二进制文件\n")
f.close()
程序运行结果如下:注意写入的每一行后面要加上换行符。否则所有文字都连接起来。
(2)
f = open('abc.txt','w')
ls = ['文本文件\n','二进制文件\n','文本文件与二进制文件\n']
f.writelines(ls)
f.close()
程序运行结果与上图相同。
数据的组织方式
组织数据可以分为一维数据、二维数据和高维数据。
一维数据
a = ['北京市','上海市','重庆市','天津市']
print(len(a))
4
一维数据的存储方式为用特殊字符来分隔各数据,例如空格、逗号、换行。
其中:使用逗号分隔的为csv格式
将列表对象输出为csv格式,采用字符串的join()格式最为方便。
一维数据的写入
ls = ['北京','上海','重庆','天津']
f = open('read.csv','w')
f.write(','.join(ls)+"\n")
f.close()
运行结果如下:
一维数据的读取
f = open('read.csv','r')
ls = f.read().strip('\n').split(',')
f.close()
print(ls)
['北京', '上海', '重庆', '天津']
二维数据
二维数据可以看作许多条一维数据组成,用csv格式存储。整个csv表格代表一个二维数据。
二维数据的写入
ls = [ ['指标', '2014年', '2015年', '2016年'],
['居民消费价格指数', '102', '101.4', '102'],
['食品', '103.1', '102.3', '104.6'],
['烟酒及用品', '994', '102.1', '101.5'],
['衣着', '102.4', '102.7', '101.4'],
['家庭设备用品', '101.2', '101', '100.5'],
['医疗保健和个人用品', '101.3', '102', '101.1'],
['交通和通信', '99.9', '98.3', '98.7'],
['娱乐教育文化', '101.9', '101.4', '101.6'],
['居住', '102', '100.7', '101.6'], ]
f = open('a.csv','w')
for row in ls:
f.write(",".join(row)+'\n')
f.close()
运行结果如下:
二维文件的写入
ls = []
f = open('a.csv','r')
for line in f:
ls.append(line.strip('\n').split(','))
f.close()
print(ls)
[['指标', '2014年', '2015年', '2016年'],
['居民消费价格指数', '102', '101.4', '102'],
['食品', '103.1', '102.3', '104.6'],
['烟酒及用品', '994', '102.1', '101.5'],
['衣着', '102.4', '102.7', '101.4'],
['家庭设备用品', '101.2', '101', '100.5'],
['医疗保健和个人用品', '101.3', '102', '101.1'],
['交通和通信', '99.9', '98.3', '98.7'],
['娱乐教育文化', '101.9', '101.4', '101.6'],
['居住', '102', '100.7', '101.6']]