python--实验12

news2024/9/22 3:53:07

目录

知识点

第一部分:文件概述

第二部分:文件的基本操作

第三部分:目录管理

第四部分:CSV文件读写

第五部分:openpyxl等模块

小结

实验


知识点

第一部分:文件概述

  • 文件标识:找到计算机中唯一确定的文件。组成包括文件路径、文件名主干和文件扩展名。
  • 文件类型:区分了文本文件和二进制文件,并解释了它们的编码方式和存储形式。               文本文件通常以行为单位存储数据,使用ASCII、UNICODE、UTF-8等编码;                     二进制文件则以二进制形式存储,如可执行文件、图像、声音和视频等。
    • 注意: 计算机在物理层面上以二进制形式存储数据; 文本文件与二进制文件的区别不在于物理上的存储方式,而是逻辑上数据的组织方式。
    • 示例:使用不同编码方式存储整数112185
      • 文本文件存放形式
      • 二进制文件存放形式

第二部分:文件的基本操作

  • 打开文件:通过Python的内置方法和os模块中定义的方法可以操作文件。使用Python内置的open函数打开文件的过程,包括文件名和访问模式的指定,以及不同访问模式的含义。
    • open(文件名,访问模式) “文件名”必填 “访问模式”可选  open(‘itheima.txt‘, ’w‘) #open函数默认encoding为utf-8
    • 注意:如果使用open函数打开文件时,如果没有注明访问模式,则必须保证文件是存在的,否则会报异常。FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
  • 文件读写
  • file1 = open('E:\\a.txt')    # 以只读方式打开E盘的文本文件
  • file2 = open('b.txt', 'w')   # 以只写方式打开当前目录的文件
  • file3 = open('c.txt', 'w+')       # 以读/写方式打开文本文件
  • file4 = open('d.txt', 'wb+')  # 以读/写方式打开二进制文件
  • 读取文件的方法
    • read():从指定文件读取指定字节的数据。语法格式为:read(n=-1)
    • readline():从指定文件读取一行数据。语法格式为:readline() 。
    • readlines() :读取指定文件中的全部数据,并按行存储到列表之中。文件中的每一行对应列表中的一个元素。语法格式为:readlines(hint=-1)
    • read() VS readlines()方法
      • read()(参数缺省时)和readlines()方法都可一次读取文件中的全部数据但因为计算机的内存是有限的,若文件较大,read()和readlines()的一次读取便会耗尽系统内存,所以这两种操作都不够安全。 为了保证读取安全,通常多次调用read()方法,每次读取size字节的数据。
    • 写文件的方法
      • write()可以将指定字符串写入文件,格式为:write(data)data为要写入的数据,每调用一次,写入的数据就会追加到文件末尾。
      • writelines()用于将行列表写入文件,格式:writelines(lines),lines表示要写入文件中的数据,可以是一个字符串或者字符串列表。 若写入文件的数据在文件中需要换行,需要显式指定换行符。
  • 字符与编码:文本文件支持多种编码方式,不同编码方式下字符与字节的对应关系不同,常见的编码方式以及字符与字节的对应关系如表所示。
  • 文件定位读写:Python提供了一些获取与修改文件读写位置的方法,用于获取和控制文件的读写位置。
    • tell():获取文件当前的读写位置。
    • seek():控制文件的读写位置。实现文件的随机读写。语法格式:seek(offset, from) ,调用成功后会返回当前读写位置。
      • offset:表示偏移量,即读写位置需要移动的字节数。 from:用于指定文件的读写位置,0(文件开头)、1(当前读写位置)、2(文件末尾)

第三部分:目录管理

  • OS模块:os模块中定义了与文件操作相关的函数,利用这些函数可以实现删除文件、重命名文件、创建和删除目录、获取当前目录、更改默认目录和获取目录列表等
    • 删除文件——os.remove(文件名)
    • 文件重命名——os.rename(原文件名,新文件名)
    • 创建/删除目录——os.mkdir(目录名)/os.rmdir(目录名)
    • 获取当前目录——os.getcwd()
    • 更改默认目录——os.chdir(路径名)
    • 获取目录列表——os.listdir(目录/路径)
    • 1、查询工作路径
      • path = os.getcwd()  # 查询当前工作目录,并赋值给path
      • print(path)
    • 2、查询指定目录下面的文件
      • os.listdir(path)          # 查询当前工作目录下的文件
    • 3、删除文件
      •  os.remove(r'C:\1.txt')     # 删除指定文件
    • 4、创建与删除目录
      • file_name = 'C:\\Users\\my_file'
      • os.mkdir(file_name)      # 创建文件夹
      • os.rmdir(file_name)       # 删除文件夹(只能删除空目录)

第四部分:CSV文件读写

  • 数据维度:基于维度的数据分类,包括一维数据、二维数据和多维数据的概念。
  • CSV文件格式规范:CSV文件的存储格式,字段的分隔方式和CSV文件的用途。
    • 以纯文本形式存储表格数据
    • 文件的每一行对应表格中的一条数据记录
    • 每条记录由一个或多个字段组成
    • 字段之间使用逗号(英文、半角)分隔
    • Windows系统中CSV文件的后缀名为.csv,可通过Excel或记事本打开
  • 读/写CSV文件:使用基本的文件操作和csv模块。
    • Python在程序中读取.csv文件后会以二维列表形式存储其中内容。
    • 用命令import csv即可直接调用csv模块进行csv文件的读写。
    • 将一、二维数据写入文件中,在文件中添加新的数据。

第五部分:openpyxl等模块

小结

  • 主要讲解了与文件和数据格式化相关的知识,包括文件概述、文件的基本操作(文件打开/关闭、txt文件读写)、文件操作模块os以及csv文件读写等。 通过本章的学习,了解计算机中文件的意义,熟练读取、更改文件,熟悉文件操作模块,并掌握常见的数据组织形式。

实验

一、实验目的:

1.熟练python编辑器pycharm的使用。

2.掌握python的程序控制结构

3.掌握python的文件相关函数,理解函数的功能

4.熟练掌握python的文件输入流和输出流,能掌握相关代码

5.清楚文件数据的格式,并且掌握相关数据的格式的代码

二、实验内容:

说明:基础题为必做题,提高题为选做题

  1. (基础题) 写一段程序能够将用户输入的用户名和密码保存到一个txt文件中。

运行截图:

程序代码:

import os  
import sys

# 获取用户输入的用户名和密码
username = input("请输入用户名:")
password = input("请输入密码:")

# 将用户名和密码保存到文件中
try:
    with open('userinfo.txt', 'w') as file:  # 使用'w'模式打开文件,如果文件不存在则创建
        file.write(f'用户名:{username}\n密码:{password}')
    print("用户名和密码已保存成功!")
except IOError as e:
    print(f"保存文件时发生错误
:{e}")

2.(基础题) 在实验题1的基础上,再另外写一段程序能读取上述文件中的用户名和密码,实现登录功能。

运行截图:

程序代码:

import os  
import sys

def login():
    # 提示用户输入用户名和密码
    input_username = input("请输入用户名:")
    input_password = input("请输入密码:")

    try:
        # 打开保存用户名和密码的文件
        with open('userinfo.txt', 'r') as file:
            lines = file.readlines()  # 读取所有行

        # 检查输入的用户名和密码是否与文件中的匹配
        if len(lines) >= 2 and lines[0].strip() == f'用户名:{input_username}' and lines[1].strip() == f'密码:{input_password}':
            print("登录成功!")
        else:
            print("用户名或密码错误!")
    except IOError as e:
        print(f"读取文件时发生错误:{e}")

# 调用登录函数
login()

3.(基础题)文件准备:在D盘新建一个文件夹a,a下有3个txt文件,分别是1.txt,2.txt,3.txt,文件内容随意填写。

要求:请编写程序代码,在C盘下新建一个文件夹test,然后将整a文件夹拷贝到test下。

运行截图:

程序代码:

import os
import shutil

# 源文件夹路径
source_folder = 'D:\\a'
# 目标文件夹路径
destination_folder = 'C:\\test'

# 确保源文件夹存在
if not os.path.exists(source_folder):
    print(f"源文件夹 {source_folder} 不存在。")
else:
    # 如果目标文件夹不存在,则创建它
    if not os.path.exists(destination_folder):
        os.makedirs(destination_folder)
    
    # 确保目标文件夹是空的,如果不是,则清空它
    if os.listdir(destination_folder):
        for filename in os.listdir(destination_folder):
            file_path = os.path.join(destination_folder, filename)
            if os.path.isfile(file_path) or os.path.islink(file_path):
                os.unlink(file_path)  # 删除文件或链接
            elif os.path.isdir(file_path):
                shutil.rmtree(file_path)  # 删除目录树

    # 复制整个文件夹
    shutil.copytree(source_folder, os.path.join(destination_folder, 'a'))

    print(f"文件夹 {source_folder} 已成功复制到 {destination_folder} 下。")

4. (提高题) 打开一个文本文件,编写程序读取其内容,并把其中的大写字母变成小写字母,小写字母变成大写字母。

(可以手动新建一个文件,hello.txt,内容如下:

Rain is falling all around,

It falls on field and tree,

It rains on the umbrella here,

And on the ships at sea.)

运行截图:

程序代码:

# 要处理的文件路径
input_file_path = 'hello.txt'
# 输出文件路径,这里我们覆盖原文件
output_file_path = 'hello_transformed.txt'

# 读取文件内容
try:
    with open(input_file_path, 'r') as file:
        content = file.read()

    # 转换大小写
    transformed_content = content.swapcase()

    # 将转换后的内容写回文件
    with open(output_file_path, 'w') as file:
        file.write(transformed_content)

    print(f"文件 '{input_file_path}' 的内容已转换并保存到 '{output_file_path}'。")
except IOError as e:
    print(f"处理文件时发生错误:{e}")

5. (提高题) 已知一个学生成绩表score.csv文件中存放着学生的姓名与各科成绩,请从取该成绩表中的数据,统计每位学生的总成绩(各科成绩之和),然后将各科成绩及总分写入一个新文件count.csv中。

思路提示:

#从csv文件中读取表格数据

#读取每一行,第一行lines[0]之后追加"总分",即lines[i].append('总分')

#之后每一行计算lines[i][1]~lines[i][len(lines[i])-1]的和

#将计算结果追加到lines[i]中

运行效果

原始成绩表score.csv:

追加了总分后的新成绩表count.csv:

程序代码:

import csv

# 原始成绩表文件路径
input_csv_path = 'score.csv'
# 新的成绩表文件路径,包含总分
output_csv_path = 'count.csv'

try:
    # 读取原始成绩表
    with open(input_csv_path, newline='', encoding='utf-8') as csvfile_in:
        reader = csv.reader(csvfile_in)
        lines = [line for line in reader]
    
    # 在第一行标题后追加"总分"
    lines[0].append('总分')

    # 计算每位学生的总成绩并追加到对应的行
    for i in range(1, len(lines)):
        # 将成绩列(从索引1开始到倒数第二列)转换为整数并求和
        total_score = sum(int(lines[i][j]) for j in range(1, len(lines[i])-1))
        # 将计算的总分追加到当前行的末尾
        lines[i].append(str(total_score))

    # 将更新后的成绩表写入新的CSV文件
    with open(output_csv_path, 'w', newline='', encoding='utf-8') as csvfile_out:
        writer = csv.writer(csvfile_out)
        writer.writerows(lines)

    print(f"更新后的成绩表已保存到 '{output_csv_path}'.")
except IOError as e:
    print(f"处理CSV文件时发生错误:{e}")
except ValueError as e:
    print(f"转换成绩时发生错误:{e}")

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

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

相关文章

尚硅谷大数据技术-数据湖Hudi视频教程-笔记03【Hudi集成Spark】

大数据新风口:Hudi数据湖(尚硅谷&Apache Hudi联合出品) B站直达:https://www.bilibili.com/video/BV1ue4y1i7na 尚硅谷数据湖Hudi视频教程百度网盘:https://pan.baidu.com/s/1NkPku5Pp-l0gfgoo63hR-Q?pwdyyds阿里…

【ARM】MDK-服务器与客户端不同网段内出现卡顿问题

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 记录不同网段之间的请求发送情况以及MDK网络版license文件内设置的影响。 2、 问题场景 客户使用很久的MDK网络版,在获取授权时都会出现4-7秒的卡顿,无法对keil进行任何操作,彻底…

Mac 如何安装vscode

Mac 电脑/ 苹果电脑如何安装 vscode 下载安装包 百度搜索vscode,即可得到vscode的官方下载地址:https://code.visualstudio.com/ 访问网页,点击下载即可。 下载完成后,得到下图所示的app。 将该 app 文件,放入到…

CV11_模型部署pytorch转ONNX

如果自己的模型中的一些算子,ONNX内部没有,那么需要自己去实现。 1.1 配置环境 安装ONNX pip install onnx -i https://pypi.tuna.tsinghua.edu.cn/simple 安装推理引擎ONNX Runtime pip install onnxruntime -i https://pypi.tuna.tsinghua.edu.cn/si…

基于STM32设计的超声波测距仪(微信小程序)(186)

基于STM32设计的超声波测距仪(微信小程序)(186) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择1.5 系统框架图…

WebSocket、服务器推送技术

WebSocket 是一种在单个 TCP 连接上进行 全双工 通信的协议,它可以让客户端和服务器之间进行实时的双向通信,且不存在同源策略限制 WebSocket 使用一个长连接,在客户端和服务器之间保持持久的连接,从而可以实时地发送和接收数据…

实现给Nginx的指定网站开启basic认证——http基本认证

一、问题描述 目前我们配置的网站内容都是没有限制,可以让任何人打开浏览器都能够访问,这样就会存在一个问题(可能会存在一些恶意访问的用户进行恶意操作,直接访问到我们的敏感后台路径进行操作,风险就会很大&#xff…

如何在excel表中实现单元格满足条件时整行变色?

可以试试使用条件格式: 一、条件格式 所谓“自动变色”就要使用条件格式。 先简单模拟数据如下, 按 B列数字为偶数 为条件,整行标记为蓝色背景色。 可以这样设置: 先选中1:10行数据,在这里要确定一下名称栏里显示…

数据的力量:Facebook如何通过数据分析驱动创新

在当今数字化和信息化的时代,数据被认为是推动企业创新和发展的关键因素之一。作为全球最大的社交媒体平台,Facebook不仅积累了庞大的用户数据,还利用先进的数据分析技术,不断探索和实现新的创新。本文将深入探讨Facebook如何通过…

Golang中读写锁的底层实现

目录 Sync.RWMutex 背景与机制 接口简单介绍 sync.RWMutex 数据结构 读锁流程 RLock RUnlock RWMutex.rUnlockSlow 写锁流程 Lock Unlock Sync.RWMutex 背景与机制 从逻辑上,可以把 RWMutex 理解为一把读锁加一把写锁; 写锁具有严格的排他性&…

Spring之事务管理TranscationManager(大合集)

原子性 事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。 一致性 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性 一个事务的执行不能被其他事务干扰。 持续性 一…

人工智能算法工程师(中级)课程12-PyTorch神经网络之LSTM和GRU网络与代码详解1

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程12-PyTorch神经网络之LSTM和GRU网络与代码详解。在深度学习领域,循环神经网络(RNN)因其处理序列数据的能力而备受关注。然而,传统的RNN存在梯度消失和梯度爆炸的问题,这使得它在长序列任务中的表现不尽…

【Git分支管理】理解分支 | 创建分支 | 切换分支 | 合并分支 | 删除分支 | 强制删除分支

目录 前言 0.理解分支 1.查看本地仓库存在的分支 2.HEAD指向分支 3.创建本地分支 4.切换分支 5.分支提交操作 6.合并分支 快进模式Fast-forward 7.删除分支 8.强制删除分支 本篇开始介绍下Git提供的杀手级的功能:分支管理 先提交再合并 前言 在玄幻武侠…

IP-Guard日志数据上传至 SYSLOG 服务器操作指南

一、功能简介 服务器支持把日志数据上传到 SYSLOG 服务器。 二、功能配置 2.1 数据目录移交设置 在服务器安装目录下 OServer3.ini 文件中,添加工具启动配置,配置五分钟内生效。 Path:设置移交目录路径,IPG 服务器会把收集完成的…

Redis④ —— 高可用

1. 主从复制 一主多从模式,采用读写分离的方式主服务器可以进行读写操作,当发生写操作时自动将写操作同步给从服务器,而从服务器一般是只读,并接受主服务器同步过来写操作命令,然后执行这条命令。主从服务器之间的命令…

jvm常用密令、jvm性能优化、jvm性能检测、Java jstat密令使用、Java自带工具、Java jmap使用

1.jps是Java虚拟机的进程状态工具,用于列出正在运行的Java进程 jps命令的使用:cmd打开直接jps 1.1不带参数: jps 默认情况下,列出所有正在运行的 Java 进程的进程 ID 和主类名。 1.2 -l:显示完整的主类名或 JAR 文件…

《故障复盘 · 数据库连接异常关闭》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

不开放80或443端口也能申请IP SSL证书!

在申请SSL/HTTPS证书时,如果不方便使用域名或者没有域名,就要申请一种特殊的SSL证书——IP SSL证书。但是一般的IP地址证书签发过程中,需要短暂开放80或者443端口才能签发成功。那么问题来了,有的实在不能开放80或者443端口&#…

keil中GD32 MCU IAP中APP的存储地址如何设置?

前面和大家聊过什么是IAP,那么IAP中APP的存储地址该如何设置呢? 以keil为例,打开工程的option选项卡: 将IROM1中的地址改为你想要保存的位置,比如0x08008000开始的位置: 这样通过keil烧录,程序…

记录|.NET上位机开发和PLC通信的实现

本文记录源自:B站视频 实验结果:跟视频做下来是没有问题的。能运行。 目录 前言一、项目Step1. 创建项目Step2. 创建动态图片展示Step3. 创建图片型按钮Step4. 创建下拉框Step1~4的效果展示Step5. 编程实体类操作类Main函数 Step1~5的效果展示Main函数 最…