Python语言零基础入门——文件

目录

一、文件的基本概念

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+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
brb、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
欢迎下次使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/6137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql中索引的概念

索引相关概念 基础概念: 在MySQL中,索引是一种数据结构,用于加快数据库查询的速度和性能。索引可以帮助MySQL快速定位和访问表中的特定数据,就像书籍的索引一样,通过存储指向数据行的指针,可以快速…

ICode国际青少年编程竞赛- Python-1级训练场-路线规划

ICode国际青少年编程竞赛- Python-1级训练场-路线规划 1、 Dev.step(3) Dev.turnLeft() Dev.step(4)2、 Dev.step(3) Dev.turnLeft() Dev.step(3) Dev.step(-6)3、 Dev.step(-2) Dev.step(4) Dev.turnLeft() Dev.step(3)4、 Dev.step(2) Spaceship.step(2) Dev.step(3)5、…

Android手写自己的路由SDK

实现自己的路由框架 ​ 在较大型的Android app中常会用到组件化技术,针对不同的业务/基础功能对模块进行划分,从上到下为壳工程、业务模块、基础模块。其中业务模块依赖基础模块,壳工程依赖业务模块。同级的横向模块(比如多个业务…

软件杯 深度学习的动物识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

MySQL-逻辑架构

1、MySQL服务器处理客户端请求 MySQL是典型的C/S架构,服务端程序使用 mysqld。实现效果:客户端进程像服务端发送(SQL语句),服务器进程处理后再像客户端进程发送 处理结果。 2、connectors 指不同语言中与SQL的交互…

【C++】双指针算法:四数之和

1.题目 2.算法思路 这道题目十分困难,在leetcode上的通过率只有36%,大家要做好心理准备。 在做个题目前强烈建议大家先看看我的上一篇博客:有效三角形个数,看完之后再去leetcode上写一写三数之和,搞懂那两个题目之后…

JavaEE 初阶篇-深入了解 Junit 单元测试框架和 Java 中的反射机制(使用反射做一个简易版框架)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 Junit 单元测试框架概述 1.1 使用 Junit 框架进行测试业务代码 1.2 Junit 单元测试框架的常用注解(Junit 4.xxx 版本) 2.0 反射概述 2.1 获…

计算机毕业设计php自行车在线租赁管理系统-vue+mysql

本系统的开发使获取自行车在线租赁管理系统信息能够更加方便快捷,同时也使自行车在线租赁管理系统管理信息变的更加系统化、有序化。系统界面较友好,易于操作。 自行车在线租赁管理系统,主要的模块包括首页、个人中心、用户管理、会员管理、自…

软件系统安全设计(安全保证措施)

软件安全保证措施word 软件所有全套资料获取进主页或者本文末个人名片直接。

C++之set/map相关实现

看着上面的图片,你可能对set和map的多样变化产生疑惑,下面我们就来详细讲解他们的区别以及实现 一.set/map 首先,在这里我们要声明,如果你对二叉搜索树一点都不了解的话,建议你先去将搜索二叉树学会再来学习这里的内…

ArkTS开发原生鸿蒙HarmonyOS短视频应用

HarmonyOS实战课程“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”已经于今日上线至慕课网(https://coding.imooc.com/class/843.html),有致力于鸿蒙生态开发的同学们可以关注一下。 课程简介 本课程以原生鸿蒙Ha…

【Canvas与艺术】新制无底图安布雷拉暗黑系桌面(1920*1080)

【主要变化】 1.去掉底图&#xff0c;改为金丝正六边形组合而成的网格&#xff1b; 2.将安布雷拉标志调暗&#xff1b; 【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html;…

力扣HOT100 - 78. 子集

解题思路&#xff1a; class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> lists new ArrayList<>(); // 解集lists.add(new ArrayList<Integer>()); // 首先将空集加入解集中for(int i 0; i < n…

Mac 安装 JDK21 流程

一、下载JDK21 访问Oracle官方网站或选择OpenJDK作为替代品。Oracle JDK从11版本开始是商业的&#xff0c;可能需要支付费用。OpenJDK是一个免费开源选项。 Oracle JDK官方网站&#xff1a;Oracle JDK Downloads OpenJDK官方网站&#xff1a;OpenJDK Downloads 这里以JDK21为…

FP16、BF16、INT8、INT4精度模型加载所需显存以及硬件适配的分析

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

EDA(一)Verilog

EDA&#xff08;一&#xff09;Verilog Verilog是一种用于电子系统设计自动化&#xff08;EDA&#xff09;的硬件描述语言&#xff08;HDL&#xff09;&#xff0c;主要用于设计和模拟电子系统&#xff0c;特别是在集成电路&#xff08;IC&#xff09;和印刷电路板&#xff08;…

CogVLM/CogAgent环境搭建推理测试

引子 对于多模态大语言模型&#xff0c;一直没有怎么接触。刚巧一朋友有问到这方面的问题&#xff0c;也就顺手调研下。智谱AI的东西一直以来&#xff0c;还是很不错的。ChatGLM的忠实fans&#xff0c;看到白嫖网站github上有他们开源的多模态CogVLM/CogAgent&#xff0c;那就…

C语言:文件操作(中)

片头 嗨&#xff01;小伙伴们&#xff0c;大家好&#xff01;在上一篇中&#xff0c;我们学习了C语言&#xff1a;文件操作&#xff08;上&#xff09;&#xff0c;在这一篇中&#xff0c;我们将继续学习文件操作&#xff0c;准备好了吗&#xff1f;Ready Go ! ! ! 文件的顺序…

Linux下top命令指标说明

目录 Linux下top命令指标说明1. 概览2. CPU利用率3. 内存利用率4. 进程信息 Linux下top命令指标说明 在Linux系统中&#xff0c;top 命令是一个用于实时监视系统运行状态的工具。通过 top 命令&#xff0c;我们可以了解系统的负载情况、CPU利用率、内存使用情况以及各个进程的…

ubuntu修改/etc/resolve.conf总是被重置

ubuntu修改/etc/resolve.conf总是被重置 其实处理来很简单&#xff0c;根据英文提示删除/etc/resolve.conf,那是一个软链接&#xff0c;重新创建/etc/resolve.conf rm /etc/resolve.conf vi /etc/resolve.conf 添加nameserver 223.5.5.5