Python文件操作(1)

简介: 【10月更文挑战第17天】

【10月更文挑战第17天】
image.png

编码---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(中国的)

image.png

文件的路径

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

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

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

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

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

打开文件

image.png

打开文件,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,可以取消这个字符串的转义操作了

image.png

关闭文件

=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赋值给对象

image.png

读取文件信息

image.png

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')

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

image.png

w的介绍

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

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

image.png

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

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

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

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

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

a的介绍

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

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

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

image.png

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

image.png

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

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

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

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

image.png

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

那么我们可以进行归纳一下,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+

目录
相关文章
|
2月前
|
安全 Python
Python语言中常用的文件操作方法探讨
通过上述方法的结合使用,我们可以构筑出强大并且可靠的文件操作逻辑,切实解决日常编程中遇到的文件处理问题。
162 72
|
2月前
|
移动开发 安全 Linux
Python文件操作的"保险箱":with语句深度实战指南
本文深入解析Python中`with`语句的原理与高级应用,通过“保险箱”类比,形象展示资源管理机制。从上下文管理协议到实战场景,涵盖文件、数据库、网络等多种资源的高效安全处理方式,助你写出更优雅、可靠的代码。
79 1
|
3月前
|
缓存 数据库连接 数据库
Python文件操作的“保险箱”:with语句深度实战指南
本文深入探讨Python中with语句在文件操作中的应用及其优势。首先介绍其底层原理,基于上下文管理协议自动管理资源的获取与释放,避免手动关闭文件导致的资源泄漏问题。接着通过基础文件读写、异常处理进阶和复合资源管理等实战场景解析with语句的便捷性与安全性。同时,阐述如何自定义上下文管理器以满足特定需求,并分析其性能考量及优化策略。最后总结实战经验,强调优先使用内置管理器、明确异常处理以及保持代码可读性的重要性,助力开发者高效编写健壮的程序。
77 1
|
3月前
|
自然语言处理 安全 JavaScript
Python文件操作的“保险箱”:with语句深度实战指南
Python中的`with`语句是文件操作和资源管理的强大工具,如同一个智能保险箱,自动处理打开和关闭操作,避免手动管理可能引发的错误。它通过上下文管理协议(`__enter__`和`__exit__`方法)确保资源在使用后正确释放。无论是逐块读取大文件、同时读写文件,还是处理特殊编码文件,`with`语句都能简化代码并提高安全性。此外,自定义上下文管理器可扩展到数据库连接等场景,而常见错误如重复关闭文件或忽略异常也需注意。结合生成器表达式批量处理文件时,`with`语句仍能保持高效和安全。总之,`with`语句是资源管理的瑞士军刀,让复杂操作变得简单可靠。
82 1
|
3月前
|
数据采集 运维 BI
Python 文件操作进阶|使用 shutil 实现高效文件复制
在开发和运维中,处理大量文件是常见需求,如备份配置、归档日志或构建部署包。手动复制粘贴已无法满足高效需求!Python 的 `shutil` 模块提供了强大的文件操作功能,支持单文件复制、目录树迁移及自动化任务构建。本文详解 `shutil.copy()` 基础用法与进阶技巧,如批量复制、自动路径检测、时间戳命名备份等,助你实现高效自动化。结合实战案例(如自动备份系统),让你的代码更专业!学习后,欢迎交流心得,一起精进 Python 技能。关注我,获取更多编程技巧与源码分享!
|
监控 Java 数据处理
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【7月更文挑战第31天】在 Python 系统编程中, 文件操作与 I/O 管理至关重要。
141 2
|
11月前
|
数据采集 存储 Python
Python文件操作2
【10月更文挑战第18天】
75 2
Python文件操作2
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
本文介绍了Python中的文件操作方法,包括使用open()打开文件、close()关闭文件、read()读取内容、readline()读取单行、readlines()读取多行、write()写入内容以及writelines()写入多行的方法。同时,探讨了文件操作模式和编码问题,并扩展了上下文管理器with...as的使用,以及对图片和音频文件操作的思考和练习。
112 1
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
|
12月前
|
存储 Python
Python文件操作
Python文件操作
|
12月前
|
存储 安全 Python
30天拿下Python之文件操作
30天拿下Python之文件操作
74 1

推荐镜像

更多