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

news2025/2/22 0:08:00

目录

一、文件的基本概念

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 csv

with 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 True
        return False
    else:
        context = context.replace('17rjb\n','')
        print(context)
    return True

def 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()
        break
    else:
        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):-1

2024.05.02
天气晴,心情佳
2024.05.03
测试0503
2024.05.04
测试0504

日记加载完毕
请输入你的选择:0
欢迎下次使用

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

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

相关文章

win10禁止自动更新的终极方法

添加注册表值 1.运行,输入regedit 2.打开注册表编辑器依次进入以下路径“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings”。 3.在Settings项中,新建DWORD(32位)值(D),重命名为以下命名“Fl…

python判断大图中包含小图并输出位置总结

python判断大图中包含小图并输出位置总结 没啥可说的,项目遇到了就直接上代码,可以减轻劳动力,花最少得时间实现应用功能。 import cv2 # 读取大图片和小图片的路径 img_big cv2.imread(big_image.png) img_small cv2.imread(small_image…

使用protoc-jar-maven-plugin生成grpc项目

在《使用protobuf-maven-plugin生成grpc项目》中我们使用protobuf-maven-plugin完成了grpc代码的翻译。本文我们将只是替换pom.xml中的部分内容,使用protoc-jar-maven-plugin来完成相同的功能。总体来说protoc-jar-maven-plugin方案更加简便。 环境 见《使用proto…

数据结构--顺序表经典OJ题

例1:合并有序顺序表 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意&#xff…

R可视化:分组频率分布直方图和密度图

介绍 ggplot2绘制分组频率分布直方图和密度图 加载R包 knitr::opts_chunk$set(message FALSE, warning FALSE) library(tidyverse) library(patchwork) library(ggpubr) library(rstatix)# rm(list ls()) options(stringsAsFactors F) options(future.globals.maxSize …

数据结构与算法---树

数据结构可视化网址 Structure Visualization: https://www.cs.usfca.edu/~galles/visualization/Totuma: https://www.totuma.cn/Algorithm Visualizer: https://algorithm-visualizer.org/ 构建二叉树 // C#include<stdio.h> #include<stdlib.h>typedef char T…

电脑找不到msvcp140.dll如何修复?msvcp140.dll丢失的多种解决方法分享

在日常电脑操作过程中&#xff0c;用户可能会遇到一个令人困扰的问题&#xff0c;即屏幕上突然弹出一条错误提示&#xff1a;“由于找不到msvcp140.dll&#xff0c;无法继续执行代码”。这一情况往往导致应用程序无法正常启动或运行&#xff0c;给工作和娱乐带来不便。不过&…

freertos入门---创建FreeRTOS工程

freertos入门—创建FreeRTOS工程 1 STM32CubeMx配置 双击运行STM32CubeMX,在首页选择“ACCESS TO MCU SELECTOR”,如下图所示&#xff1a;   在MCU选型界面&#xff0c;输入自己想要开发的芯片型号&#xff0c;如&#xff1a;STM32F103C8T6: 2 配置时钟 在“System Core”…

【MATLAB】解决不同版本MATLAB出现中文乱码的问题

解决不同版本MATLAB出现中文乱码的问题 方法1&#xff1a;更改保存类型为GBK方法2&#xff1a;记事本打开方法3&#xff1a;Notepad参考 低版本matlab打开高版本Matlab的.m文件时&#xff0c;出现中文乱码问题。比如下图&#xff1a; 出现原因为&#xff1a; 编码格式不统一问…

【深度学习】第二门课 改善深层神经网络 Week 1 深度学习的实践层面

&#x1f680;Write In Front&#x1f680; &#x1f4dd;个人主页&#xff1a;令夏二十三 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;深度学习 &#x1f4ac;总结&#xff1a;希望你看完之后&#xff0c;能对…

力扣---二叉树的锯齿形层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,…

通信光缆主要敷设方式有哪些(续)

在《通信光缆主要敷设方式有哪些》一文中&#xff0c;介绍了光缆的直埋、架空和管道敷设方式。此外&#xff0c;根据敷设场景的不同&#xff0c;光缆的常见敷设方式还包括&#xff1a;高铁槽道内敷设、水底敷设、墙壁敷设、引上、室内敷设等。 1 高铁槽道内光缆敷设 光缆顺沿高…

机器学习每周挑战——二手车车辆信息交易售价数据

这是数据集的截图 目录 背景描述 数据说明 车型对照&#xff1a; 燃料类型对照&#xff1a; 老规矩&#xff0c;第一步先导入用到的库 第二步&#xff0c;读入数据&#xff1a; 第三步&#xff0c;数据预处理 第四步&#xff1a;对数据的分析 第五步&#xff1a;模型建…

会声会影电影片头怎么做 会声会影电影质感调色技巧

片头通常通过一系列的图像、音乐和文字等元素来引入电影的主题和氛围。通过视觉和音频的呈现方式&#xff0c;给观众留下深刻的第一印象&#xff0c;为电影的故事铺设基础。这篇文章来学习一下会声会影片头怎么做&#xff0c;会声会影电影质感调色技巧。 一、会声会影电影片头…

数据库(MySQL)基础:多表查询(一)

一、多表关系 概述 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本上分为三种&#xff1a;…

npm install digital envelope routines::unsupported解决方法

目录 一、问题描述二、问题原因三、解决方法 一、问题描述 执行命令 npm install 报错&#xff1a;digital envelope routines::unsupported 二、问题原因 Node.js 17 版本引入了 OpenSSL 3.0&#xff0c;它在算法和密钥大小方面实施了更为严格的限制。这一变化导致 npm 的升…

badKarma:一款功能强大的网络侦查GUI工具

关于badKarma badKarma是一款开源的网络侦查工具&#xff0c;该工具基于Python 3开发&#xff0c;提供了友好的图形化用户接口&#xff0c;可以帮助广大渗透测试人员在网络基础设施安全审计过程中执行网络侦查任务。 badKarma是一个模块化工具&#xff0c;基于python3 GTK套件…

【研发管理】产品经理知识体系-产品创新流程

导读&#xff1a;产品创新流程是一个系统性的过程&#xff0c;旨在通过创造和引入新的产品或改进现有产品来满足市场需求、解决用户问题或实现竞争优势。 目录 1、产品创新引论 2、决策基本框架 3、模糊前端 4、产品创新流程模型概论 5、门径管理流程 6、并行工程和集成产…

基于ssm+jsp+mysql+java的人事管理系统

&#x1f49e;文末获取源码联系&#x1f649; &#x1f447;&#x1f3fb; 精选专栏推荐收藏订阅&#x1f447;&#x1f3fb; &#x1f380;《Java精选实战项目-计算机毕业设计题目推荐-期末大作业》&#x1f618;更多实战项目~ https://www.yuque.com/liuyixin-rotwn/ei3euo/d…

设计模式: 工厂模式

工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一&#xff0c;这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 工厂模式提供了一种创建对象的方式&#xff0c;而无需指定要创建的具体类。 工厂模式属于创建型…