目录
一、文件的基本概念
1.文件
2.绝对路径与相对路径
3.打开文件的模式
二、文件的读取
三、文件的追加
四、文件的写入
五、with语句
六、csv文件
1.csv文件的读取
2.csv文件的写入
七、练习题:实现日记本
一、文件的基本概念
1.文件
- 文件是以计算机硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序等等。计算机文件基本上分为二种:二进制文件(没有统一的字符编码)和纯文本文件(有统一的编码,可以被看做存储在磁盘上的长字符串)。
- 纯文本文件编码格式常见的有ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16等。
- 二进制文件与文本文件的一个最主要的区别在于是否有统一的字符编码格式,二进制文件顾名思义是直接由0与1组成,无统一的字符编码。如图片文件(jpg、png),视频文件(avi)等。
2.绝对路径与相对路径
- 绝对路径指的是从根目录开始到文件或者文件夹所在位置的完整路径。
- 相对路径则是相对于当前工作目录来确定文件或者文件夹的位置。
3.打开文件的模式
mode | 解释 |
r | 只读(默认模式,文件必须存在,不存在则抛出异常) |
w | 只写,写之前会清空文件的内容,如果文件不存在,会创建新文件 |
a | 追加的方式,在原本内容中继续写,如果文件不存在,则会创建新文件 |
r+ | 可读可写 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写 |
b | rb、wb、ab、rb+、wb+、ab+意义和上面一样,用于二进制文件操作 |
二、文件的读取
- 打开文件→读取文件的内容→关闭文件
import os
# 打开文件#相对路径
# f = open('test.txt',encoding='utf-8')
# f = open('../第9章/test2.txt',encoding='utf-8')
# f = open('../test3.txt',encoding='utf-8')#绝对路径
path = os.getcwd() # 获取当前py文件的路径
filename = path + '/test.txt'
f = open(filename,encoding='utf-8')# 读取文件
context = f.read() # 读取全部
# context = f.read(5) # 读取5个字符
# context = f.readline() # 读取一行
# context = f.readlines() # 按行读取并且存入列表
print(context)# 关闭文件
f.close()
运行结果:
你好
我在学习Python
文件
三、文件的追加
- 打开文件→写入文件→关闭文件
# 打开文件
f = open('test3.txt',mode='a',encoding='utf-8')
# 写入文件
f.write('hello\n')
a = ['a\n','b\n','c\n']
f.writelines(a)
# 关闭文件
f.close()
此时test3.txt内容为:
hello
a
b
c
四、文件的写入
- 打开文件→写入文件内容→关闭文件
# 打开文件
f = open('test2.txt',mode='w',encoding='utf-8')
# 写入文件内容# f.write('你好,我是-17\n')
# f.write('python\n')# f.writelines(['你好,我是-17\n','正在学习Python'])context = ['你好,我是-17','正在学习Python']
for i in context:f.write(i+'\n')# 关闭文件
f.close()
五、with语句
- 用来关闭文件的关键字
# 将文件打开并重命名为f
with open('test.txt',mode='r',encoding='utf-8') as f:context = f.read()print(context)
运行结果:
你好,我是-17
六、csv文件
1.csv文件的读取
新建一个data.csv文件,
import csv
with open('data.csv',mode='r',encoding='GBK') as f:cf = csv.reader(f)head = next(cf)scores = []for i in cf:scores.append(int(i[2]))print(sum(scores)/len(scores))
运行结果:
88.5
2.csv文件的写入
import csvwith open('data.csv',mode='w',encoding='GBK') as f:cf = csv.writer(f)cf.writerow(['ll','c','89'])lista = [['la','c','70'],['lb','python','85'],['lc','java','63']]cf.writerows(lista)
运行后,data.csv文件的内容如下:
例:随机生成姓名,科目,成绩等信息
import csv,random
from my_package import my_tools
lista = []
def random_info(n=5):subjects = ['python','java','C++','html']for i in range(n):name = my_tools.random_string(random.randint(3,6))subject = random.choice(subjects)score = random.randint(50,100)lista.append([name,subject,score])def average():with open('data.csv',mode='r',encoding='GBK') as f:cf = csv.reader(f)head = next(cf)scores = []for i in cf:scores.append(int(i[2]))return sum(scores)/len(scores)def make_datas():with open('data.csv',mode='w',encoding='GBK') as f:cf = csv.writer(f)random_info()cf.writerows(lista)make_datas()
result = average()
print('平均分是:',round(result,2))
七、练习题:实现日记本
def write_txt():date = input('请输入今天的日期:')text = input('请输入日记内容:')filename = '日记本.txt'f = open(filename,mode='a',encoding='utf-8')f.write('17rjb\n')f.write(date+'\n')f.write(text + '\n')f.close()return True
def read_txt(day=-1):filename = '日记本.txt'f = open(filename, mode='r', encoding='utf-8')context = f.read()f.close()if day!='-1':lista = context.split('17rjb\n')for i in lista:if i[:10] == day:print(i)return Truereturn Falseelse:context = context.replace('17rjb\n','')print(context)return Truedef quit():print('欢迎下次使用')
def menu():print('*'*30)print('''欢迎使用Python日记本系统1.写日记2.阅读日记0.退出系统''')print('*' * 30)menu()
while True:op = input('请输入你的选择:')if op == '1':if write_txt():print('日记保存成功')elif op == '2':day = input('请输入你要查询的日期(查询全部请输入-1):')if read_txt(day):print('日记加载完毕')else:print('未查询到日记信息,请重试')elif op == '0':quit()breakelse:print('请重新选择')
测试结果:
******************************
欢迎使用Python日记本系统1.写日记2.阅读日记0.退出系统
******************************
请输入你的选择:1
请输入今天的日期:2024.05.02
请输入日记内容:天气晴,心情佳
日记保存成功
请输入你的选择:1
请输入今天的日期:2024.05.03
请输入日记内容:测试0503
日记保存成功
请输入你的选择:1
请输入今天的日期:2024.05.04
请输入日记内容:测试0504
日记保存成功
请输入你的选择:2
请输入你要查询的日期(查询全部请输入-1):2024.05.02
2024.05.02
天气晴,心情佳日记加载完毕
请输入你的选择:2
请输入你要查询的日期(查询全部请输入-1):-12024.05.02
天气晴,心情佳
2024.05.03
测试0503
2024.05.04
测试0504日记加载完毕
请输入你的选择:0
欢迎下次使用