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+

相关文章
|
4月前
|
监控 Java 数据处理
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【7月更文挑战第31天】在 Python 系统编程中, 文件操作与 I/O 管理至关重要。
56 2
|
6天前
|
数据采集 存储 Python
Python文件操作2
【10月更文挑战第18天】
Python文件操作2
|
5月前
|
开发者 Python
Python基础第七篇(Python的文件操作)
Python基础第七篇(Python的文件操作)
|
2月前
|
存储 Python
Python文件操作
Python文件操作
|
2月前
|
存储 安全 Python
30天拿下Python之文件操作
30天拿下Python之文件操作
31 1
|
5月前
|
存储 安全 开发者
文件操作?Python让你轻松搞定!
【6月更文挑战第12天】Python编程中的文件操作至关重要,涉及数据存储和系统交互。通过内置的`open()`函数,开发者可轻松处理文件。以只读模式`&#39;r&#39;`为例,使用`with`语句打开并读取文件内容;写入文件则用`&#39;w&#39;`或`&#39;a&#39;`模式。文件对象还支持高级功能,如文件指针移动,允许随机访问。掌握这些技能能提升开发效率。
31 0
|
25天前
|
Java 程序员 Python
【Python】文件操作
【Python】文件操作
18 0
|
2月前
|
监控 安全 Java
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【9月更文挑战第13天】在Python系统编程中,文件操作与I/O管理至关重要。本文通过五个实战案例分享最佳实践:高效遍历文件系统、优雅处理文件读写、利用缓冲机制优化性能、并行处理文件加速任务以及异常处理确保程序稳健。使用pathlib、上下文管理器及concurrent.futures等工具,助你轻松掌握Python文件系统与I/O操作,提升编程效率和项目质量。 示例代码展示了如何使用pathlib遍历目录、with语句安全读写文件、控制缓冲区大小、并行处理多个文件以及捕获异常保证程序稳定运行。通过这些技巧,你将能够在实际项目中更加高效地管理和操作文件。
44 6
|
3月前
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
本文介绍了Python中的文件操作方法,包括使用open()打开文件、close()关闭文件、read()读取内容、readline()读取单行、readlines()读取多行、write()写入内容以及writelines()写入多行的方法。同时,探讨了文件操作模式和编码问题,并扩展了上下文管理器with...as的使用,以及对图片和音频文件操作的思考和练习。
27 1
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
|
3月前
|
安全 Python
python文件操作详解
整个文件操作过程中,我们应始终保持代码的健壮性和清晰性,确保在出现错误时资源能够被正确释放。
45 1