目录
学习目标
1.了解计算机中文件的类型、数据维度
2.掌握文件的基本操作
3.熟练管理文件与目录
4.掌握常见的数据维度
一、文件概述
1.文件标识
文件标识的意义:找到计算机中唯一确定的文件。
文件标识的组成:文件路径、文件名主干、文件扩展名。
操作系统以文件为单位对数据进行管理。
2.文件类型
计算机中的文件分为文本文件和二进制文件。
文本文件:专门存储文本字符数据。
二进制文件:不能直接使用文字处理程序正常读写,必须先了解其结构和序列化规则,再设计正确的反序列化规则,才能正确获取文件信息。
3.标准文件
Python的sys模块中定义了3个标准文件,分别为:
stdin(标准输入文件)。标准输入文件对应输入设备,如键盘。
stdout(标准输出文件)。
stderr(标准错误文件)。标准输出文件和标准错误文件对应输出设备,如显示器。
二、文件的基本操作
1.文件的打开与关闭
(1)打开文件
内置函数open()用于打开文件,该方法的声明如下:
open(file, mode='r', buffering=-1)
file:文件的路径。
mode:设置文件的打开模式,取值有r、w、a。
buffering:设置访问文件的缓冲方式。取值为0或1。
r:以只读方式打开文件(mode参数的默认值)。
w:以只写方式打开文件。
a:以追加方式打开文件。
b:以二进制形式打开文件。
+:以更新的方式打开文件(可读可写)
示例如下:
file1 = open('E:\\a.txt') # 以只读方式打开E盘的文本文件a.txt
file2 = open('b.txt', 'w') # 以只写方式打开当前目录的文本文件b.txt
file3 = open('c.txt', 'w+') # 以读/写方式打开文本文件c.txt
file4 = open('d.txt', 'wb+') # 以读/写方式打开二进制文件d.txt
(2)关闭文件
Python可通过close()方法关闭文件,也可以使用with语句实现文件的自动关闭。
(1)close()方法
file.close()
(2)with语句
with open('a.txt') as f:
pass
2.文件的读写
(1)读取文件
read()方法
read()方法可以从指定文件中读取指定字节的数据
with open('file.txt', mode='r') as f:
print(f.read(2)) # 读取两个字节的数据
print(f.read()) # 读取剩余的全部数据
readline()方法
readline()方法可以从指定文件中读取一行数据
with open('file.txt', mode='r', encoding='utf-8') as f:
print(f.readline())
print(f.readline())
(2)写文件
write()方法
write()方法可以将指定字符串写入文件
string = "Here we are all, by day; by night." # 字符串
with open('write_file.txt', mode='w', encoding='utf-8') as f:
size = f.write(string) # 写入字符串
print(size) # 打印字节数
writelines()方法
writelines()方法用于将行列表写入文件
string = "Here we are all, by day;\nby night we're hurl'd By dreams,
each one into a several world."
with open('write_file.txt', mode='w', encoding='utf-8') as f:
f.writelines(string)
3.文件的定位读写
Python提供了一些获取与修改文件读写位置的方法,以实现文件的定位读写。
tell() 获取文件当前的读写位置。
seek() 控制文件的读写位置。
(1)tell()方法
with open('file.txt') as f:
print(f.tell()) # 获取文件读写位置
print(f.read(5)) # 利用read()方法移动文件读写位置
print(f.tell()) # 再次获取文件读写位置
(2)seek()方法
Python提供了seek()方法,使用该方法可控制文件的读写位置,实现文件的随机读写。
seek(offset, from)
offset:表示偏移量,即读写位置需要移动的字节数。
from:用于指定文件的读写位置,该参数的取值为0、1、2。
seek()方法调用成功后会返回当前读写位置。
示例如下:
with open('file.txt') as f:
print(f.tell()) # 获取文件读写位置
print(f.read(5)) # 利用read()方法移动文件读写位置
print(f.tell()) # 再次获取文件读写位置
注意:
若打开的是文本文件,那么seek()方法只允许相对于文件开头移动文件位置,若在参数from值为1、2的情况下对文本文件进行位移操作,将会产生错误。
三、文件与目录管理
os模块中定义了与文件操作相关的函数,利用这些函数可以实现删除文件、文件重命名、创建/删除目录、获取当前目录、更改默认目录与获取目录列表等操作。
删除文件——os.remove(文件名)
文件重命名——os.rename(原文件名,新文件名)
创建/删除目录——os.mkdir(目录名)/os.rmdir(目录名)
获取当前目录——os.getcwd()
更改默认目录——os.chdir(路径名)
获取目录列表——os.listdir(目录/路径)
四、数据维度
维度
从广义上讲,维度是与事物“有联系”的概念的数量,根据“有联系”的概念的数量,事物可分为不同维度。
1.基于维度的数据分类
根据组织数据时与数据有联系的参数的数量,数据可分为一维数据、二维数据和多维数据。
示例:
一维数据
成都,杭州,重庆,武汉,苏州,西安,天津,南京,郑州,长沙,沈阳,青岛,宁波,东莞,无锡
二维数据
多维数据
“高三一班考试成绩”:[
{“姓名”: “刘婧”,
“语文”: “124”,
“数学”: “137”,
“英语”: “145”,
“理综”: “260” };
{“姓名”: “张华”,
“语文”: “116”,
“数学”: “143”,
“英语”: “139”,
“理综”: “263” };
……
]
2. 一二维数据的存储与读取
(1)数据存储
一维数据:
一维数据呈线性排列,一般用特殊字符分隔,例如:
使用空格分隔:成都 杭州 重庆 武汉 苏州 西安 天津
使用逗号分隔:成都,杭州,重庆,武汉,苏州,西安,天津
使用&分隔:成都&杭州&重庆&武汉&苏州&西安&天津
一维数据的存储需要注意以下几点:
同一文件或同组文件一般使用同一分隔符分隔。
分隔数据的分隔符不应出现在数据中。
分隔符为英文半角符号,一般不使用中文符号作为分隔符。
二维数据可视为多条一维数据的集合,当二维数据只有一个元素时,这个二维数据就是一维数据。
二维数据:
CSV(Commae-Separeted Values,逗号分隔值)是国际上通用的一二维数据存储格式。
CSV格式规范:
以纯文本形式存储表格数据
文件的每一行对应表格中的一条数据记录
每条记录由一个或多个字段组成 字段之间使用逗号(英文、半角)分隔
csv示例:
姓名,语文,数学,英语,理综
刘婧,124,137,145,260
张华,116,143,139,263
邢昭林,120,130,148,255
鞠依依,115,145,131,240
(2)数据读取
Windows平台中CSV文件的后缀名为.csv,可通过Office Excel或记事本打开
Python在程序中读取.csv文件后会以二维列表形式存储其中内容
示例:
csv_file = open('score.csv')
lines = []
for line in csv_file:
line = line.replace('\n','')
lines.append(line.split(','))
print(lines)
csv_file.close()
章节例题
1.创建文件data.txt,共100000行,每行存放一个1~100之间的整数
代码如下:
import random
f = open('data.txt','w+')
for i in range(100000):
f.write(str(random.randint(1,100)) + '\n')
f.seek(0,0)
print(f.read())
f.close()
2. 生成100个MAC地址并写入文件中,MAC地址前6位(16进制)为01-AF-3B
01-AF-3B(-xx)(-xx)(-xx)
-xx
01-AF-3B-xx
-xx
01-AF-3B-xx-xx
-xx
01-AF-3B-xx-xx-xx
代码如下:
import random
import string
def create_mac():
mac = '01-AF-3B'
# 生成16进制的数
hex_num = string.hexdigits
for i in range(3):
# 从16进制字符串中随机选择两个数字
# 返回值是一个列表
n = random.sample(hex_num,2)
# 拼接内容 将小写字母转换称大写字母
sn = '-' + ''.join(n).upper()
mac += sn
return mac
# 主函数 随机生成100个mac地址
def main():
with open('mac.txt','w') as f:
for i in range(100):
mac = create_mac()
print(mac)
f.write(mac + '\n')
main()
总结
本章主要介绍了文件与数据维度相关的知识,包括计算机中文件的定义、文件的基本操作、文件与目录管理、数据维度。通过本章的学习,希望读者能了解计算机中文件的意义、熟练地读取和管理文件,并掌握常见的数据组织形式。