首页 > 编程语言 >python--实验12 文件

python--实验12 文件

时间:2024-07-17 11:29:01浏览次数:11  
标签:文件 12 python lines -- file path csv os

目录

知识点

第一部分:文件概述

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

第三部分:目录管理

第四部分: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}")

标签:文件,12,python,lines,--,file,path,csv,os
From: https://blog.csdn.net/wumingzei/article/details/140429712

相关文章

  • 面试官:为什么SpringBoot的 jar 可以直接运行?
    引言传统Java应用部署:需要将应用打包成WAR文件,部署到如ApacheTomcat、Jetty等Web容器中。SpringBoot:改变了Java应用的开发体验,应用可以打包成可直接运行的jar文件,无需外部容器。SpringBootJAR包基础概念FatJAR(胖Jar):包含应用程序所需的全部依赖库和应用程序自身的......
  • [Linux+git+Gitee+Jenkins]持续集成实验安装配置详细
    首先理解持续集成原理,看懂并理解图1。图1持续集成原理结构图1中,版本控制服务器指远程代码仓库,本实验使用GitEE作为远程代码仓库;Jenkins自动化部署服务器为虚拟机,操作系统为Linux;服务器1…n为应用服务器,可使用自己物理机作为应用服务器。详......
  • 非Controller控制层参数校验怎么办
    参数校验背景通常在SpringBoot中,参数校验是在Controller控制层完成的。文章探讨了在非Controller控制层进行参数校验的方法。Validator接口Spring提供了JSR-303的一个变种@Validated。Validator接口定义了用于执行验证的方法,主要方法包括:validate(Tobject,Cla......
  • MySQL数据库基础教程(DDL、DML、DQL…)
    MySQL数据库基础教程:DDL、DML、DQL…文章目录1概述2数据库设计——DDL2.1数据库操作2.2表操作2.2.1约束2.2.2数据类型3数据库操作——DML4数据库查询——DQL4.1基本查询4.2条件查询4.3分组查询4.4排序查询4.5分页查询5多表设计5.1一对多5.2一对一5.3......
  • 【花海与车】一张车里的艺术照!太美了!要火的节奏!摄影级真人写真,逼真大片!唯美!看完被震撼
    今天是鲜花摄像方面推荐的第四款SD1.5Lora模型,也是近日鲜花方面最后一款推荐的模型——**NAL_花海与车_摄影系列。**该款模型灵感来自于一张坐在车里的艺术照,lora主要作用于添加了花植物之类的填充效果,还有车内的坐姿,抬手姿势。模型下载地址:作者参数建议:**真实系:**ma......
  • Java面试 (5) :SSM(Spring框架、Spring MVC、MyBatis…)
    Java面试——SSM基础知识:Spring框架、SpringMVC、MyBatis…文章目录1String框架1.1IOC和DI1.2Bean1.2.1作用域1.2.2自动装配模式1.2.3生命周期1.2.3.1doGetBean()源码1.2.3.2七个阶段详解1.2.4Bean线程安全1.3常用的Spring注解1.4事务1.4.1Spring事务......
  • 协议篇-I3C协议 本章带你真正使用I3C
        上一章讲到I2C协议,作为IIC的升级版,I3C的优点非常明显。总线依然采用SDA和SCL通信。    相比较IIC,I3C协议要复杂很多,网上有很多对I3C的介绍,但是对于真正需要编写I3C代码的人来说并不友好,内容千篇一律,使用协议过程中遇到问题却很难找到答案,作者已经实现使用......
  • WHAT - 分页中基于索引和基于游标
    目录基于索引的分页(OffsetPagination)优点:缺点:基于游标的分页(CursorPagination)优点:缺点:适用场景示例代码基于索引的分页(React/TypeScript示例)基于游标的分页(React/TypeScript示例)在加载列表数据时,分页(pagination)是为了避免一次性加载大量数据,导致性能问题或用户......
  • 用22端口验证的IP地址专用SSL证书
    通常情况下,申请IP地址的SSL/TLS证书(用于HTTPS)会要求开放80端口或443端口。通过访问这两个端口来验证你对IP的所有权,验证通过后才能签发证书。然而,很多用户会由于运营商或防火墙或其他的原因,导致这两个端口都是无法打开来让外部访问的,导致IP无法通过CA的验证,证书就没办法签发下......
  • h5表格标签
    表格标签:<table></table>行:<tr>单元格:<td>快捷键:table>tr*2>td{单元格}表格属性border:设置表格边框width:设置表格宽度height:设置表格高度如:表格单元格合并水平合并:colspan,保留左边,删除右边垂直合并:rowspan,保留上边,删除下边......