python基础知识(六)——文件

本文介绍了Python文件操作,包括打开、关闭、备份,阐述了不同打开模式的特点及文件对象方法。还介绍了os、JSON、pickle模块,os模块用于处理操作系统功能,JSON用于语言间数据交换,pickle用于Python对象持久化和传输。最后给出了几个Python程序实例。

一.文件的操作介绍
(1)文件的打开与关闭
打开:用open函数打开一个已经存在文件或者创建一个新文件。
eg . f = open("python.txt ",‘w’)
文件的打开方式:
(ps . 要读取二进制文件,比如图片,视频等时,用‘rb’ , ‘wb’ 'ab’等模式打开)

r
*1. 读权限:yes
*2 . 写权限 no
*3 . 文件不存在,是否创建文件: no
*4 . 文件操作时是否清空内容: no
w
*1 . 读权限: no
*2 . 写权限: yes
*3 . 文件不存在时,是否会创建: yes
*4 . 文件操作时,是否会清空: yes
a
*1 . 读权限: no
*2 . 写权限: yes
*3 . 文件不存在时,是否会创建: yes
*4 . 文件操作时,是否会清空: no
w+
*1 . 读权限: yes
*2 . 写权限: yes
*3 . 文件不存在时,是否会创建: yes
*4 . 文件操作时,是否会清空 : yes
a+
*1 . 读权限: yes
*2 . 写权限: yes
*3 . 文件不存在时,是否会创建: yes
*4 . 文件操作时,是否会清空: no
r+
*1 . 读权限: yes
*2 . 写权限: yes
*3 . 文件不存在时,是否会创建: no
*4 . 文件操作时,是否会清空: no
eg .
在这里插入图片描述
实验结果如下:
在这里插入图片描述

对文件file 对象:
1)file.closed 如果文件关闭了,返回true,否则,返回False
2)file.mode 返回打开文件的访问模式。
3)file.name 返回文件的名称。
4)file.softspace 如果用print 输出,后面必须跟一个空格符,则返回False ,否则返回False .

file对象常用的方法:
1)读
read :读取指定字节,默认1024
readline : 读取文件中一行的内容
readlines:读取文件的所有内容,返回一个列表。
2)写
write:从指针所在的位置写入,写入的是字符串内容
writeliines:将列表中的每个元素都写入文件中。
3)定位
tell() 指针当前所在的位置
seek() 移动指针的位置
seek(ofset,from)—offset :偏移量,
from:0:表示文件开头,1:表示当前位置,2:表示文件末尾。

(2)文件的关闭
方法一:调用close() 方法关闭文件,文件使用后需要关闭,因为文件对象会占用操作及系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。
方法二:python中引入了with语句来自动帮我们调用close() 方法
with open("/doc/file’/‘r’) as f:
print(f.read())
(python中with语句使用于对资源进行访问的场合,保证不管处理过程中是否发生错误或者异常都会自动执行规定的“清理”操作,释放被访问的资源,比如有文件读写后自动关闭,线程中锁的自动获取和释放。)
eg .在这里插入图片描述
实验结果如下:
在这里插入图片描述

(3)文件的备份
eg.将一个文件中的内容,拷贝到别的文件中。
代码如下:

import os
def copy(sorce_file, copy_file):
    """
    思路:以读的方式打开源文件,然后复制下来,之后一些的方式写进需要拷贝的文件中。完成拷贝工作。
    :param sorce_file: 源文件
    :param copy_file: 拷贝到的文件
    :return:
    """
    if os.path.exists(sorce_file):
        f = open(sorce_file)
        content = f.read()
        f.close()
        copy_f = open(copy_file, 'w')
        copy_f.write(content)
        copy_f.close()
        print("拷贝%s为%s成功" %(sorce_file, copy_file))
    else:
        print("拷贝%s不存在" %(sorce_file))

copy('doc/root', 'doc/passwd')

二. os模块

定义:语义为操作系统,处理操作系统相关功能,可跨平台。比如显示当前目录下所有文件或者删除某个文件或者获取文件大小。
eg. os a模块获取信息方法:

import os

# 1). 返回操作系统类型, 值为posix,是Linux操作系统, 值为nt, 是windows操作系统
print(os.name)
os_name = 'Linux' if os.name == 'posix' else 'Windows'
print("当前操作系统: %s" % (os_name))

# 2). 操作系统的详细信息
detail_info = os.uname()
print(detail_info)
print("主机名:", detail_info.nodename)
print("硬件架构:", detail_info.machine)
print("系统名称:", detail_info.sysname)
print("Linux内核的版本号:", detail_info.release)
# 3). 系统环境变量等价于Linux的env命令
print(os.environ)

# 4). 通过key值获取环境变量对应的value值
print(os.environ['PATH'])

路径:绝对路径和相对路径。

(1)os模块中的rename()可以完成对文件的重命名操作。
rename(需要修改的文件名,新的文件名)
(2)os模块中的remove()可以完成对文件的是删除操作 。
remove(待删除的文件名)
(3)os 模块中创建删除目录:
创建目录:os.mkdir() 。eg. os.mkdir(‘img’)
递归创建目录: mkdir -p
删除目录: os.rmdir(‘iimg’)
(4)os 模块创建删除文件
创建文件:os.mknod() 。 eg.os.mknod(‘root.txt’)

eg.文件批量创建。

import os
import random
import string


def generate_code(length=4):
    code_li = random.sample(string.ascii_lowercase, 1 + string.ascii_uppercase, 2 + string.digits, 1)
    # 将密码的组合顺序打乱
    random.shuffle(code_li)
    #将列表生成为字符串
    return "".join(code_li)


def create_file():
    dirname = 'img'
    if not os.path.exists(dirname):
        os.mkdir(dirname)
        print("目录%s创建成功" % (dirname))
    for count in range(10):
        filename = generate_code() + '.png'
        fullfile_name = os.path.join(dirname, filename)
        os.mknod(fullfile_name)
        print("%s创建成功" % (fullfile_name))


create_file()

批量修改后缀名:

import os

def add_ad(suffix):
     
 def modify_suffix(dirname, old_suffix, new_suffix):
    """
    'hello.png'  ----'hello.jpg'
    img .png .jpg
    :param dirname: 操作的目录
    :param old_suffix: 原先的后缀名
    :param new_suffix: 新的后缀名
    :return:
    """
    # 0-1).判断源后缀名是否以点开头, 如果不是,则添加;
    if not old_suffix.startswith('.'):
        old_suffix = '.' + old_suffix
    # 0-2). 判断新的后缀名是否以点开头, 如果不是,则添加;
    if not new_suffix.startswith('.'):
        new_suffix = '.' + new_suffix
    # 1. 判断查找的目录是否存在, 如果不存在, 显示报错
    if not os.path.exists(dirname):
        print("Error: 目录%s不存在" % (dirname))
    # 2. 如果文件存在,做如下操作:
    else:
        # 2-1). 列出指定目录的所有文件名;
        filenames = os.listdir(dirname)
        # 2-2). 依次遍历目录的每一个文件;
        for filename in filenames:
            # 2-3). 如果文件是以old_suffix结尾,则对改文件重命名;
            if filename.endswith(old_suffix):
                # 修改后缀名
                # 2-3-1). 将后缀名和文件名本身分隔开; hello.png === hello .png, 并生成新的文件名
                new_filename = os.path.splitext(filename)[0] + new_suffix
                full_old_filename = os.path.join(dirname, filename)
                full_new_filename = os.path.join(dirname, new_filename)
                # 2-3-2). 重命名
                os.rename(full_old_filename, full_new_filename)
                print("重命名【%s】 为【%s】成功!" % (filename, new_filename))


modify_suffix('img', '.jpg', '.png')

JSON模块:
定义: JSON是一种轻量级的数据交换格式。它是基于ECMAScript的一个子集。它是将各种语言进行相互转换(字典,元组,数值都可以,集合不行)
优势:易于人阅读和编写,同时也可以提高机器的解析和生成,(一般用于提升网络传输速率。)
eg
在这里插入图片描述
在这里插入图片描述

ps : 通用模块:
(1)ASCII :只能存储英文
(2)GB2312:不通用
(3)unicode:每个字都用两个字节存放,文件较大。
(4)utf-8:英文用一个字节存放,中文用三个字节存储JSON模块存储,保存的是字符串

JSON模块应用:将json转换成python模块。
代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
将python 模块转换成json模块
代码如下:
在这里插入图片描述
运行结果如下:
在这里插入图片描述
数据类型编解码:
(1)json.dumps :将python对象编码成json字符串。
(ps.序列化及反序列化常用的参数:在这里插入图片描述
ensure_ascii=False :中文存储时需要设定
indent =4 增加缩进,增强可读性,但缩进空格会使数据变大
separators=(’,’,’;’) 自定义分隔符,元素分隔符为逗号,字典key和value值的分隔符为冒号。
sort_key =True :字典排序)

(2)json.dump: 将对象序列化并保存在文件中。
(3)json.loads:将已编码的JSON字符串解码成python对象。
(4)json.load: 将序列化字符串从文件中读取并反序列化。
在这里插入图片描述
在这里插入图片描述
运行结果为:
在这里插入图片描述

pickle模块:
python中的pickle 模块实现python的所有数据序列和反序列化。与JSON不同的是pickle不是用于语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法。它支持python中所有的数据类型。
在这里插入图片描述

运行结果为:
在这里插入图片描述

总结:
1.JSON只能处理基本的数据类型,pickle能处理所有的python数据类型。
2.JSON用于各种语言之间的字符转换,pickle用于Python程序对象的持久化或者python程序间对象网络传输,但不同版本的python序列化可能存在差异。

实例一:读取一个文件,显示除了以#开头的行以外的所有行。
实验代码如下:
在这里插入图片描述
运行结果为:

在这里插入图片描述

实例二:制作一个密码薄,其可以存储一个网址(eg:www.youkuaiyun.com)和一个密码(eg.1234)请编写程序完成增删改查功能,并实现文件存储功能。

import os
def start():  # 定义主界面函数
    print("请选择需要的操作:")
    print("1.增加网址和密码")
    print("2.删除网址和密码")
    print("3.修改网址和密码")

def add_weblist():
#定义添加网址的函数:
    f = open("weblist.txt", 'w')
    web = input("请输入需要添加的网址:") + '\n'
    password = input("请输入密码:")
    f.write(web)
    f.write(password)
    f.close()

def del_weblist():
#删除网址的函数:
    weblist  = ""
    f = open("weblist.txt", 'r')
    web = input("请输入需要删除的网址:")
    password = input("请输入密码:")
    fr = f.read()
    f.close()
    if web in fr and password in fr:
        f1 = open("weblist.txt", 'w')
        f1.write(web)
        f1.close()
        print("删除成功")
    else:
        print("未找到对应网址或密码,请检查后重试")
        
def change_weblist():
#改变网址的函数:
    f = open("weblist.txt", 'r')
    web = input("请输入旧网址:")
    password = input("请输入旧密码:")
    fr = f.read()
    f.close()
    if web in fr and password in fr:
        f1 = open("weblist.txt", 'w')
        new_web = input("请输入新网址:") + '\n'
        new_password = input("请输入新密码:")
        f1.write(new_web)
        f1.write(new_password)
        f.close()
        print("更改成功")
    else:
        print("未找到对应网址或密码,请检查后重试")
        
#启动start()函数:
start()
while True:
    num = input("请输入操作指令:\n")
    num = int(num)
    if num == 1:
        add_weblist()
    elif num == 2:
        del_weblist()
    elif num == 3:
        change_weblist()

实例三:设置无重复字符的最长字符串。

内容概要:本文是一篇关于使用RandLANet模型对SensatUrban数据集进行点云语义分割的实战教程,系统介绍了从环境搭建、数据准备、模型训练与测试到精度评估的完整流程。文章详细说明了在Ubuntu系统下配置TensorFlow 2.2、CUDA及cuDNN等深度学习环境的方法,并指导用户下载和预处理SensatUrban数据集。随后,逐步讲解RandLANet代码的获取与运行方式,包括训练、测试命令的执行与参数含义,以及如何监控训练过程中的关键指标。最后,教程涵盖测试结果分析、向官方平台提交结果、解读评估报告及可视化效果等内容,并针对常见问题提供解决方案。; 适合人群:具备一定深度学习基础,熟悉Python编程和深度学习框架,从事计算机视觉或三维点云相关研究的学生、研究人员及工程师;适合希望动手实践点云语义分割项目的初学者与进阶者。; 使用场景及目标:①掌握RandLANet网络结构及其在点云语义分割任务中的应用;②学会完整部署一个点云分割项目,包括数据处理、模型训练、测试与性能评估;③为参与相关竞赛或科研项目提供技术支撑。; 阅读建议:建议读者结合提供的代码链接和密码访问完整资料,在本地或云端环境中边操作边学习,重点关注数据格式要求与训练参数设置,遇到问题时参考“常见问题与解决技巧”部分及时排查。
内容概要:本文详细介绍了三相异步电机SVPWM-DTC(空间矢量脉宽调制-直接转矩控制)的Simulink仿真实现方法,结合DTC响应快与SVPWM谐波小的优点,构建高性能电机控制系统。文章系统阐述了控制原理,包括定子磁链观测、转矩与磁链误差滞环比较、扇区判断及电压矢量选择,并通过SVPWM技术生成固定频率PWM信号,提升系统稳态性能。同时提供了完整的Simulink建模流程,涵盖电机本体、磁链观测器、误差比较、矢量选择、SVPWM调制、逆变器驱动等模块的搭建与参数设置,给出了仿真调试要点与预期结果,如电流正弦性、转矩响应快、磁链轨迹趋圆等,并提出了模型优化与扩展方向,如改进观测器、自适应滞环、弱磁控制和转速闭环等。; 适合人群:电气工程、自动化及相关专业本科生、研究生,从事电机控制算法开发的工程师,具备一定MATLAB/Simulink和电机控制理论基础的技术人员。; 使用场景及目标:①掌握SVPWM-DTC控制策略的核心原理与实现方式;②在Simulink中独立完成三相异步电机高性能控制系统的建模与仿真;③通过仿真验证控制算法有效性,为实际工程应用提供设计依据。; 阅读建议:学习过程中应结合文中提供的电机参数和模块配置逐步搭建模型,重点关注磁链观测、矢量选择表和SVPWM调制的实现细节,仿真时注意滞环宽度与开关频率的调试,建议配合MATLAB官方工具箱文档进行参数校准与结果分析。
已经博主授权,源码转载自 https://pan.quark.cn/s/bf1e0d5b9490 本文重点阐述了Vue2.0多Tab切换组件的封装实践,详细说明了通过封装Tab切换组件达成多Tab切换功能,从而满足日常应用需求。 知识点1:Vue2.0多Tab切换组件的封装* 借助封装Tab切换组件,达成多Tab切换功能* 支持tab切换、tab定位、tab自动化仿React多Tab实现知识点2:TabItems组件的应用* 在index.vue文件中应用TabItems组件,借助name属性设定tab的标题* 通过:isContTab属性来设定tab的内容* 能够采用子组件作为tab的内容知识点3:TabItems组件的样式* 借助index.less文件来设定TabItems组件的样式* 设定tab的标题样式、背景色彩、边框样式等* 使用animation达成tab的切换动画知识点4:Vue2.0多Tab切换组件的构建* 借助运用Vue2.0框架,达成多Tab切换组件的封装* 使用Vue2.0的组件化理念,达成TabItems组件的封装* 通过运用Vue2.0的指令和绑定机制,达成tab的切换功能知识点5:Vue2.0多Tab切换组件的优势* 达成多Tab切换功能,满足日常应用需求* 支持tab切换、tab定位、tab自动化仿React多Tab实现* 能够满足多样的业务需求,具备良好的扩展性知识点6:Vue2.0多Tab切换组件的应用场景* 能够应用于多样的业务场景,例如:管理系统、电商平台、社交媒体等* 能够满足不同的业务需求,例如:多Tab切换、数据展示、交互式操作等* 能够与其它Vue2.0组件结合运用,达成复杂的业务逻辑Vue2.0多Tab切换组件的封装实例提供了...
代码下载地址: https://pan.quark.cn/s/41cd695ddf65 `htmldiff` 是一个以 Ruby 语言为基础构建的库,其主要功能是在 HTML 文档中展示文本之间的差异。 该库的一个显著特点在于它不仅能够识别出不同之处,还会借助 HTML 标签来呈现这些差异,从而让用户能够直观地观察到文本的变化情况。 这种特性使得 `htmldiff` 在版本控制、文档对比或任何需要展示文本变动场景的应用中显得尤为有用。 `htmldiff` 的核心作用是对比两个字符串,并生成一个 HTML 输出结果,这个结果会明确地指出哪些部分被添加、哪些部分被删除以及哪些部分被修改。 此外,通过运用 CSS,用户可以进一步调整差异展示的样式,使其与项目或网站的现有设计风格相协调。 在使用 `htmldiff` 之前,需要先完成该库的安装。 如果项目已经配置了 Ruby 环境和 Gemfile,可以在 Gemfile 文件中添加 `gem htmldiff` 语句,随后执行 `bundle install` 命令进行安装。 如果没有 Gemfile 文件,也可以直接采用 `gem install htmldiff` 命令来进行全局安装。 在编程实现时,可以通过调用 `Htmldiff.diff` 方法来对比两个字符串,并获取相应的 HTML 输出。 例如:```rubyrequire htmldiffstr1 = "这是一个示例文本。 "str2 = "这是一个示例文本,现在有更多内容。 "diff_html = Htmldiff.diff(str1, str2)puts diff_html```上述代码将会输出两个字符串之间的差异,其中新增的内容会被 `<ins>` 标签所包围,而...
源码地址: https://pan.quark.cn/s/4b03c5611266 依据所提供的资料,可以判定这份资料是关于《电子技术基础模拟部分》第五版教科书第七章节的习题解析,由湖南人文科技学院通信与控制工程系的田汉平教师提供。 尽管具体内容未予展示,但能够围绕模拟电子技术的基础理论、第七章节所涉及的核心概念以及潜在的习题种类等方面来展开相关知识点的阐述。 ### 模拟电子技术概述模拟电子技术是电子工程学科中的一个关键领域,主要探讨模拟信号的产生、转换、传输和处理等议题。 模拟信号是指时间与幅度上均呈现连续变化的电信号。 模拟电路的设计与剖析是模拟电子技术的核心,它涵盖了放大器、振荡器、滤波器等电路的设计原理及其应用。 ### 第七章核心知识点猜测#### 1. 放大电路分析与设计- **基本放大电路**:共射极、共基极和共集电极放大电路的特性及其应用场景。 - **多级放大电路**:掌握如何将多个放大电路串联,以提升增益或优化频率响应。 - **差分放大电路**:用于抑制共模信号,放大差模信号,是精密仪器和测量设备中的关键构成部分。 #### 2. 反馈电路与稳定性- **反馈的基本概念**:正反馈与负反馈的区分,以及它们在电路中的应用场景。 - **深度负反馈**:解析深度负反馈状态下的放大器性能改进,包括增益稳定性和带宽的拓宽。 - **振荡电路**:理解LC振荡器、RC振荡器的工作机制及应用领域。 #### 3. 功率放大器- **A类、B类、AB类功率放大器**:熟练掌握不同类型功率放大器的特性、效率及其适用环境。 - **热效应与保护措施**:讨论在功率放大器设计过程中需要关注的散热问题及相应的防护措施。 #### 4. 集成运算放大器的应用- **理想运放模型**:熟...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值