手撕Python之文件操作

news2024/9/21 7:11:19


1.编码

编码---encode()

解码---decode()

#编码(encode):将我们能够识别的文字,转换为计算机能够识别的内容
print('你好'.encode())#默认utf-8
#b'\xe4\xbd\xa0\xe5\xa5\xbd'
#将'你好'翻成进制数

#解码(decode):将计算机能识别的内容,转换为我们能识别的内容

print(b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode())
#你好
#将计算机语言翻译成我们能看懂的语言

#如何设置编码格式呢?
#下面是两种编码格式

print('你好'.encode('gbk'))
#b'\xc4\xe3\xba\xc3'

print('你好'.encode('utf-8'))
#b'\xe4\xbd\xa0\xe5\xa5\xbd'

#我们可以发现,编码的默认值是和这个utf-8是一样的
#解码也是默认utd-8

print(b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode('gbk'))
#浣犲ソ
#这个是我们的解码使用gbk
#这个叫做乱码


#编码和解码格式是不一致的,会导致乱码或者报错
 #我们编码使用gbk就行,但是我们的解码使用gbk就会进行报错


#编码用什么格式,解码就用什么格式
#我们使用gbk模式产生出来的编码就用gbk模式进行解码的操作
#模式是要进行对应的,不然是会报错的

编码用什么格式,解码就用什么格式

我们使用gbk模式产生出来的编码就用gbk模式进行解码的操作

模式是要进行对应的,不然是会报错的

格式有两中

uft-8和gbk(中国的)

2.文件操作

文件的路径

文件的绝对路径和相对路径的解释

'''
文件路径:要打开的文件的存储位置
    绝对路径:从盘符开始一直到文件的路径
        如:C:\Users\27890\Desktop\demo.txt
    相对路径:同文件夹下的文件才会进行使用的(同一个文件夹下才能使用相对路径)
        如:demo.txt
        '''

绝对路径:就是处于盘符的某个位置

相对路径:对于现在这个py文件,我们要打开的文件此时我们两个是在一个文件夹里面的

我们输入要打开文件的文件名字就能打开了

打开文件

打开文件,open(文件路径,mode='r',encodeing='cp936')

open()有三个参数的

mode='r'

mode:设置文件的打开方式

r:文件以只读的方式打开

encodeing="cp936"

encodeing:设置打开文件的编码格式

#我们现在桌面有个文件叫demo.txt文件,那么我们如何打开呢?
#我们先将文件位置进行复制
#"C:\Users\27890\Desktop\demo.txt"

#1.打开文件----open(文件路径)
#打开文件之后会返回一个文件对象,那么我们就需要一个变量进行保存的操作
f=open(r"C:\Users\27890\Desktop\demo.txt")
print(f)
#为什么我们这个会报错呢?
#回想起我们之前的转义字符\
#那么这个的\和后面的字母或者是数字一起组合的话可能有着其他的意思

#那么我们如何进行处理呢?
#我们在整个字符串的前面加上r就可以取消字符串中的转义了
#<_io.TextIOWrapper name='C:\\Users\\27890\\Desktop\\demo.txt' mode='r' encoding='cp936'>


#上面的是绝对路径
#那么我们这个进行相对路径的书写

f1=open('demo.txt')
print(f1)
#<_io.TextIOWrapper name='demo.txt' mode='r' encoding='cp936'>

#这个打开文件的open()有三个参数的
#open(文件路径,mode='r',encodeing='cp936')

我们在路径的字符串的前面加上r,可以取消这个字符串的转义操作了

关闭文件

=open(r"C:\Users\27890\Desktop\demo.txt")
print(f)

f.close()
#查看文件是否关闭:
print(f.closed)
#True

#如果忘记关闭怎么办,我们可以进行自动关闭的操作的
#with open()
with open("demo.txt")as f:
    print(f'1{f.closed}')
    #在with open里面就是出于打开的状态,出来的话就自动进行关闭了
print(f'2{f.closed}')
#1False
#2True
#as将open("demo.txt")打开的文件对象绑定到变量f上。
#这意味着在with语句的代码块中,你可以使用变量f来访问这个文件对象。

关闭我们有手动的关闭

close()

还有自动的

我们在打开的时候用with open,在这个代码结束之后就会进行自动关闭的操作了

对于as的用法

我们这里

as将open("demo.txt")打开的文件对象绑定到变量f上。

这意味着在with语句的代码块中,你可以使用变量f来访问这个文件对象

我们将打开的文件的返回对象通过as赋值给对象

读取文件信息

read:将文件的内容全部读取

with open("demo.txt") as f:
    print(f.read())
#123456
#通过这种方法我们能将文件中的数据进行读取

read(n):读取一个长度的数据

n是正整数

在括号内写上数字的话,那么我们就设置了读取的长度限制

with open("demo.txt") as f:
    print(f.read(3))
#123

对于文档中存在汉字的读取方式

对于文档中存在汉字的话,我们是如何进行读取的呢?

#我们在demo.txt文件中添加中文通过这种方法进行读取的话就会报错,这是为什么呢?

#根据报错的信息,我们需要对这个打开的时候的编码格式进行改变
with open("demo.txt",encoding='utf-8') as f:
    print(f.read())
'''
123456
这是一个demo.txt文件
'''

只需要将这个open内的第二个默认参数改为utf-8就行了

设置编码格式uft-8

下一次读取的开始位置

对于多次读取的话,我们的下一次读取就是从前面一次读取的结束位置的后面的那个位置开始进行读取操作的

ith open("demo.txt",encoding='utf-8') as f:
    print(f.read(2))
    print('-'*30)
    print(f.read())

'''
12
------------------------------
3456
这是一个demo.txt文件
'''
#我们在第二次读取的时候并没有从头开始
#而是从上一次读完的下一个位置开始的

readline():一次读取一行数据

将文件中的每一行进行读取

with open("demo.txt",encoding='utf-8') as f:
    print(f.readline())#读取第一行
    #123456
    print(f.readline())#读取第二行
    #这是一个demo.txt文件

readlines():以行为单位,读取所有数据,返回的是一个以行数据为元素的列表

with open("demo.txt",encoding='utf-8') as f:
    print(f.readlines())

#['123456\n', '这是一个demo.txt文件']    

将每一行的数据当成一个元素,然后放到一个列表中进行存储

文件的写入

我们通过write进行数据的写入

write(字符串)

我们打开时的open默认的是r,就是只能读,不能写的模式

我们如果这么就进行写入的操作的话,那么就是会进行报错操作的

'''
with open("demo.txt",encoding='utf-8') as f:
    f.write('胡云凯')
r'''
Traceback (most recent call last):
  File "C:\Users\27890\Desktop\15.文件操作.py", line 154, in <module>
    f.write('胡云凯')
io.UnsupportedOperation: not writable
'''
#这里进行了报错

那么我们如何进行数据的写入呢?

那么我们就需要用另外一种模式进行打开了

r----只读不能写,如果文件不存在是会进行报错的

w---只能够进行写入,不存在就创建,存在的话就进行所有数据进行写入

a---只能够进行写入,不存在就创建,存在的话就就在原有的数据的基础下进行数据的追加写入

我们需要将这个打开文件时的第二个参数进行修改

with open("demo.txt",mode='w',encoding='utf-8') as f:
    f.write('胡云凯666')

对文件进行查看,确实是多了这个数据

w的介绍

对于'w'的话,只能写,打开的文件不存在就进行创建的操作,打开文件会将之前存在的文件进行清空的操作的

with open("demo1.txt",mode='w',encoding='utf-8') as f:
    f.write('胡云凯666')

可以看到我们本来要打开demo1这个文件的

但是我们桌面上没有这个文件

对于w的话,如果没有文件我们就进行创建的操作

w有个霸道的地方,如果我们打开的文件之前有数据的话,w会将文件内的数据进行清空的操作

然后进行数据的写入操作的

a的介绍

a其实是追加的意思,我们在列表中涉及到追加的知识

对于a的话,打开的文件不存在的话就进行这个文件的创建操作

with open("demo2.txt",mode='a',encoding='utf-8') as f:
    f.write('胡云凯666')

可以看见桌面上多了一个demo2的文件

现在我们的demo1里面是有数据存放的

但是现在我们通过a方式进行数据的写入操作

那么原先的数据会消失吗?

with open("demo1.txt",mode='a',encoding='utf-8') as f:
    f.write('凯子坚持C')

我们发现原先的数据并没有被删除,并且在原先的数据后面进行数据的追加了

那么我们可以进行归纳一下,a只写不读,打开文件不存在的话是会进行文件的创建的,如果文件存在的话,并且有数据的话,我们就在原先的数据的后面进行数据的读写

写入的话是不会帮你换行的

我们只能在写入的时候加上\n进行换行操作

对文件可读可写操作

在r 、w、a的后面加上+,就可以进行可读可写的操作

with open("demo1.txt",mode='r+',encoding='utf-8') as f:
    f.write('\n凯子坚持C')
    print(f.readlines())

    f.write('\nhi')
    print(f.read())

#['\n', '凯子坚持C子坚持C\n', '凯子坚持C\n', '凯子坚持C\n', 'hi']

对于文件中的光标

查看文件中光标的位置--tell()

f.tell()

with open("demo1.txt",mode='r+',encoding='utf-8') as f:
    f.write('\n凯子坚持C')
    print(f.readlines())

    f.write('\nhi')
    print(f.read())

#['\n', '凯子坚持C子坚持C\n', '凯子坚持C\n', '凯子坚持C\n', 'hi']
    print(f.tell())
    #97

移动光标---seek(0,起始位置)

起始位置:0(文件开头),1(当前光标的位置),2(文件结尾)

如果我们在重新读取一遍,那么我们需要将光标移动到文件的开头

with open("demo1.txt",mode='r+',encoding='utf-8') as f:
    f.write('\n凯子坚持C')
    print(f.readlines())

    f.write('\nhi')
    print(f.read())

#['\n', '凯子坚持C子坚持C\n', '凯子坚持C\n', '凯子坚持C\n', 'hi']
    print(f.tell())
    #97
    f.seek(0,0)
    print(f.tell())
    print(f.read())


'''
['\n', '凯子坚持C子坚持C\n', '凯子坚持C\n', '凯子坚持C\n', 'hi\n', '凯子坚持C\n', 'hi\n', '凯子坚持C\n', 'hi\n', '凯子坚持C\n', 'hi']

135
0

凯子坚持C子坚持C
凯子坚持C
凯子坚持C
hi
凯子坚持C
hi
凯子坚持C
hi
凯子坚持C
hi
凯子坚持C
hi

对于r+的话,我们光标打开位置是0

如果我们进行数据的写入的操作话,我们是会将原先的数据进行覆盖的,而不是在原有的数据后面进行追加的

r+是不能一上来就进行写

对于w+的话,尽量少用,一般用于创建文件,用于可读可写的操作

对于a+的话,打开文件光标位置是最后的,因为a是追加的

with open("demo1.txt",mode='a+',encoding='utf-8') as f:
    print(f.tell())

#135

如果我们使用a+的话,直接读取文件的话是没有东西的,因为我们的光标在最后面

with open("demo1.txt",mode='a+',encoding='utf-8') as f:

    print(f.tell())
    f.seek(0,0)
    print(f.read())

所以我们在使用a+的时候,我们需要进行数据的读取的话,我们需要将光标移动到最前面的位置

使用这个seek(0,0)就能实现了

如果我们在以后的话,优先读文件就使用r+

写文件就a+

创建文件就w+

3.文件流

文件流:临时文件,py文件执行完,临时文件占用内存,自动回收

如果我们要使用临时文件的话,那么我们是需要进行数据的导入的

io流

文件流分为:字符串类型、字符串类型

字符串类型的流

import io

s=io.StringIO()#生成一个字符串类型的临时文件
s.write('hello')
s.seek(0,0)#将光标放到开头
print(s.read())

字节类型的流

import io
b=io.BytesIO()#生成一个字节类型的临时文件
#我们需要进行编码操作
b.write('你好'.encode())#只能写入字节数据,需要进行编码
print(b.getvalue())
#b'\xe4\xbd\xa0\xe5\xa5\xbd'
#字节的访问就是getvalue()
#如果像变成我们能看懂的东西,那么就进行解码操作
print(b.getvalue().decode())
#你好

4.文件目录操作

操控电脑上的文件,需要导入os模块

文件夹的创建

使用os.mkdir

import os
os.mkdir('凯子坚持C')

如果我们想要固定创建的位置的话,我们就需要使用相对路径

import os
os.mkdir(r'D:\作业\凯子坚持C')

如果是同一个文件夹的话,那么我们使用相对路径就行了

文件夹的重命名操作

现在我们的桌面是有一个文件的---凯子坚持C.txt

我们如何对这个文件进行重命名的操作呢?

使用os.rename

import os
os.rename("凯子坚持C",'小凯')

文件夹的查询操作

获取当前文件的位置

os.getcwd()---返回值就是当前文件的位置

import os
print(os.getcwd())#获取当前文件的位置
#C:\Users\27890\Desktop

获取当前文件夹内所有的文件

os.listdir()

import os
print(os.listdir())#获取当前文件夹内所有的内容

这些操作我们也是可以进行路径的指定的,获取指定文件夹中所有的内容

删除文件夹

删除空文件夹os.rmdir("文件名")

import os
os.rmdir("小凯")#删除空文件夹

将文件夹进行删除

os.remove

import os
os.remove("文件名")

对图片进行操作

如果想打开图片的话,那么我们需要用字节的方式进行打开

那么我们的读取模式从r变成rb

b是以字节的方式进行读取

这里我进行读取是十分卡顿的,因为这个图片的字节是很多的

with open(r"C:\Users\27890\Desktop\微信图片_20240906224155.png",mode='rb') as f:
    print(f.read())

b:以字节方式打开内容

应用于打开图片、音频、视频等非文字文件

对图片进行复制的操作

我们需要先拿到需要复制的文件信息

然后再进行复制

我们先定义一个变量,将要复制图片的信息进行存储

with open(r"C:\Users\27890\Desktop\微信图片_20240906224155.png",mode='rb') as f:
    data=f.read()


#我们这里不能在用rb了,因为我们要复制这个图片了,所以我们用wb
with open(r"C:\Users\27890\Desktop\微信图片_20240906224155附件.png",mode='wb') as f:
    f.write(data)

从名字我们就能看出这个图片我们进行复制成功了

我们需要先打开这个我们要复制的图片,将获取的信息用变量进行保存

然后利用这个变量进行文件的创建

最后就得到了这个复制的图片

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

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

相关文章

兼顾身份保护和文本对齐!中山大学等提出CoRe:任意提示的文本到图像个性化生成!

文章链接&#xff1a;https://arxiv.org/pdf/2408.15914 亮点直击 CoRe只用于输出embedding和注意力图&#xff0c;不需要生成图像&#xff0c;可以用于任意提示。 在身份保护和文本对齐方面表现出优越的性能&#xff0c;特别是对于需要高度视觉可变性的提示。 除了个性化一般…

2. Python之注释及缩进以及print和input函数使用

一. Python代码中的注释及缩进 Python中注释有单行注释&#xff0c;多行注释&#xff0c;声明注释 单行注释使用符号#&#xff0c;从#开始&#xff0c;后面到本行末尾都是注释内容。多行注释可以使用’‘’ ‘’三个引号&#xff0c;三个引号内的内容都是注释声明注释&#x…

密钥加密机的定义与分类

密钥加密机&#xff0c;也称为加密机或硬件加密模块(HSM, Hardware Security Module)&#xff0c;是信息安全领域中的核心设备。它通过密码学原理和密钥管理技术&#xff0c;对敏感数据进行加密保护&#xff0c;确保数据在传输和存储过程中的安全性。以下是对密钥加密机的详细解…

开始一个WPF项目时的记忆重载入

目前在工业软件的UI开发方案选择中&#xff0c;WPF仍然是一个重要的选项。 但是其固有的复杂性&#xff0c;对于像我这样&#xff0c;并不是一直在从事界面开发的人来说&#xff0c;每次重启&#xff0c;都需要一两天的适应的时间。所以这里稍微写一个笔记。 还是老办法&…

分享一款520表白节JS代码

源码介绍 今天给大家分享一款JS表白源码 js会随 随机颜色心形跟随鼠标互动520表白节女神表白利器&#xff01; 修改的话就搜索&#xff1a;LOVEh 就能找到这个英文了。 效果预览 源码获取 分享一款520表白节JS代码 百度网盘提取码&#xff1a;2yar&#xff1a;https://pan.…

JavaScript高级——回调函数

1、回调函数的含义 ① 你定义的 ② 你没有调 ③ 但最终他执行了&#xff08;某个时刻或者某个条件下&#xff09; 2、常见的回调函数 ① dom事件回调函数 —— 发生事件的dom元素 ② 定时器回调函数 —— window ③ ajax请求回调函数 ④ 生命周期回调函数 本文分享…

【Adaptive AutoSAR 源码解析01】通信中间件技术总览

https://www.autosar.org/fileadmin/standards/R21-11/AP/AUTOSAR_EXP_ARAComAPI.pdf#page=8&zoom=100,94,473

pip install “git+https://xxx“报错error: subprocess-exited-with-error

有时候即使使用科学上网&#xff0c;可以正常访问github也会发生pip install “githttps://xxx“报错 如 解决方法&#xff1a; 我们可以将pip install “githttps://xxx“分为两步&#xff1a; 第一步&#xff1a; pip install "githttps://xxx" 第二步&#…

计算机技术专硕,三维数字地球的学习路径?

三维数字地球是一个跨学科领域&#xff0c;涉及地理信息系统&#xff08;GIS&#xff09;、计算机图形学、遥感技术、大数据处理等多个方面。作为计算机技术专硕的学生&#xff0c;可以按照以下学习路径来逐步深入&#xff1a; 1、基础理论学习&#xff1a; 地理信息系统&…

基于IP子网的VLAN典型配置举例(H3C,其他厂商同理)

基于IP子网的VLAN典型配置举例 1. 组网需求 如下图所示&#xff0c;办公区的主机属于不同的网段192.168.5.0/24和192.168.50.0/24&#xff0c;Device C在收到来自办公区主机的报文时&#xff0c;根据报文的源IP地址&#xff0c;使来自不同网段主机的报文分别在指定的VLAN中传…

仙人掌:花语与传说交织的独特魅力

仙人掌&#xff0c;花语丰富多样&#xff0c;有坚强勇敢&#xff0c;也有温柔孤独。其传说精彩纷呈&#xff0c;蕴含着爱与勇气。了解仙人掌的花语与传说&#xff0c;感受它独特的魅力与坚韧精神。 一、仙人掌的花语内涵 仙人掌&#xff0c;一种生长在恶劣环境中的独特植物&am…

机器视觉硬件知识点整理(一):光源类型以及选型

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一&#xff0c;光源1.1 环形光源1.2 背光源1.3 条形光源1.4 同轴光源&#xff1a;1.5 点光源1.6 碗状光源(球积分光源) 前言 在探索机器视觉的奥秘之旅中&…

20240910软考架构-------软考141-145答案解析

每日打卡题141-145答案 141、【2015年真题】 难度&#xff1a;简单 在分布式数据库中包括分片透明、复制透明、位置透明和逻辑透明等基本概念&#xff0c;其中&#xff1a;( )是指局部数据模型透明&#xff0c;即用户或应用程序无须知道局部场地使用的是哪种数据模型。 A&…

【快速解决】搭建VUE+VScode+elementUI开发环境,Vue环境配置

目录 1、通过这个之间下载node.js&#xff08;全选next即可&#xff09; 2、winr检验是否安装成功&#xff08;运行下面两个命令即可&#xff09; 3、将下面我给你的这个压缩包解压&#xff0c;然后放到空间足够的磁盘里面 4、【重点】设置环境变量 第一个变量路径里面长这…

安装OpenResty(Linux-Docker)

文章目录 创建挂载目录的配置文件和日志通过lua脚本实现通过请求头动态路由 直接在linux中安装请参考博客 https://blog.csdn.net/shall_zhao/article/details/142070389 这篇博客讲解如何在docker中安装 创建挂载目录的配置文件和日志 这个主要是为了我们后面对配置文件进行…

VS中SVN的简介、安装和使用(安装+汉化+使用)

一.安装SVN 1.下载&#xff1a;Downloads TortoiseSVN 安装包&#xff1a; 汉化包&#xff08;就在安装包下面&#xff09;&#xff1a; 2.安装&#xff1a;无脑下一步 SVN客户端不是指一个桌面应用程序&#xff0c;而是集成到系统的右键菜单中的插件 二.安装vs插件&#x…

基于SpringBoot的在线购物平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的在线购物平台&am…

亚信安慧AntDB数据库与华为DPA数据保护一体机完成兼容性互认证,共筑数据安全与效率新高地

近日&#xff0c;湖南亚信安慧科技有限公司&#xff08;简称“亚信安慧”&#xff09;与华为技术有限公司&#xff08;简称“华为”&#xff09;完成了亚信安慧AntDB数据库与华为DPA数据保护一体机兼容性互认证。 图1&#xff1a;华为DPA数据保护一体机兼容性互认证 亚信安慧A…

专业通风天窗厂家能提供哪些服务

专业通风天窗厂家提供的服务通常涵盖了从设计、生产、销售到安装、售后等多个环节&#xff0c;具体服务内容可能因厂家而异&#xff0c;但一般包括以下方面。1、设计服务个性化设计&#xff1a;根据客户的需求和建筑物的特点&#xff0c;提供科学合理的设计方案。包括天窗的尺寸…

RTX3060 FP64测试与猜想

RTX3060 FP64测试与猜想 一.小结二.查看FP64的峰值性能三.打满FP64、FP32的利用率,对比差异四.进一步证明pipe_fp64_cycles_active并不是2个fp64 core的metrics RTX3060 FP64测试与猜想 一.小结 RTX3060 compute capability为8.6,每个SM有2个FP64 core。每个cycle可输出2个fp6…