Python文件相关知识点strip、open、read、write、close、readline、readlines、encoding、encode、decode

简介: 文件的作用: 可以永久的保存数据.文件在硬盘中存储的格式是二进制.打开文件读写文件关闭文件打开文件, 是文件从硬盘中存到内存中open(file, mode=‘r’, encoding)file 要操作的文件名字, 类型是 strmode, 文件打开的方式, r(read) 只读打开, w(write) 只写打开 a(append) 追加打开encoding 文件的编码格式, 常见的编码格式有两种, 一种是gbk, 一种是utf-8返回值, 文件对象, 后续所有的文件操作,都需要通

@[toc]

1.文件操作

文件的作用: 可以永久的保存数据.
文件在硬盘中存储的格式是二进制.
打开文件
读写文件
关闭文件

在这里插入图片描述
在这里插入图片描述

1.1读文件-r

打开文件, 是文件从硬盘中存到内存中
open(file, mode='r', encoding)
file 要操作的文件名字, 类型是 str
mode, 文件打开的方式, r(read) 只读打开, w(write) 只写打开 a(append) 追加打开
encoding 文件的编码格式, 常见的编码格式有两种, 一种是gbk, 一种是utf-8
返回值, 文件对象, 后续所有的文件操作,都需要通过这个文件对象进行

# 以只读的方式打开当前目录中,text1.txt 文件, 文件不存在会报错
f = open('text1.txt', 'r')
# 2. 读文件 文件对象.read()
buf = f.read()
print(buf)
# 3. 关闭文件  文件.close()  将内存中三大文件同步到硬盘中
f.close()

1.2写文件-w

  1. open函数打开文件,没有指定文件的编码,windows默认是gbk,Mac和linux默认是utf-8
  2. write函数将“你好,中国”写入文件中,使用gbk编码写入
  3. 在pycharm中双击打开文件,默认使用的编码是utf-8
  4. 使用utf-8编码打开gbk 编码的数据,出现乱码

编码︰就是如何将中文汉字变为二进制,或者如何将二进制转换为汉字
解决方案:是两种方式的编码统─即可
方案一:open打开文件的时候,指定使用utf-8打开
方案二: pycharm中使用gbk 的方式打开

1.2.1方案一:

# 1. 打开文件 w 方式打开文件,文件不存在,会创建文件, 文件存在,会覆盖清空原文件
f = open('a.txt', 'w', encoding='utf-8')
# 2. 写文件 文件对象.write(写入文件的内容)
f.write('hello world!\n')
f.write('hello python!\n')
f.write('你好,中国!')
# 3. 关闭文件
f.close()

1.2.2方案二:

在这里插入图片描述
将这里改成GBK

1.3追加文件-a

a 方式打开文件, 追加内容,在文件的末尾写入内容
文件不存在,会创建文件
注意点: 不管是a 方式打开文件,还是 w 方式打开文件,写内容,都是使用 write()函数

f = open('b.txt', 'a', encoding='utf-8')
# f.write('hello world!\n')
f.write('123\n')
f.close()

1.4文件的读操作

1.4.1read()

# 1. 打开文件
f = open('a.txt', 'r', encoding='utf-8')
# 2. 读写文件 文件对象.read(n)  n 一次读取多少字节的内容,默认不写,读取全部内容
buf = f.read(3)
print(buf)  # 123
print('-'*30)
buf = f.read(3)  #
print(buf)
# 3. 关闭文件
f.close()

在这里插入图片描述

1.4.2按行读取

.strip是可以把字符串中的空格\n去掉

f = open('a.txt', 'r', encoding='utf-8')
# f.readline()  # 一次读取一行的内容, 返回值是读取到的内容(str)
# buf = f.readline()

# f.readlines()  # 按行读取,一次读取所有行,返回值是列表, 列表中的每一项是一个字符串,即一行的内容
buf = f.readlines()
print(buf)  # ['1234\n', '5678']
buf = [i.strip() for i in buf]
print(buf)  # ['1234', '5678']
f.close()

1.4.3模拟读取大文件

end=''打印的时候不会换行

情况一:大文件分为好几行

f = open('a.txt', 'r', encoding='utf-8')
while True:
    buf = f.readline()
    if buf:  # if len(buf) > 0   容器,可以直接作为判断条件,容器中有内容,为True,没有数据是False
        print(buf, end='')
    else:
        # 文件读完了
        break

f.close()

情况二:大文件只有一行

f = open('b.txt', 'r', encoding='utf-8')
while True:
    buf = f.read(5)  # f.read(4096)
    if buf:
        # print(buf, end='')
        print(buf)
    else:
        break

f.close()

4.4.4补充: 计算机中的大小

计算机只认识 0 和 1 ,
进制:
二进制, 只有 0 和 1 组成,逢二进一
十进制, 0 1 2 3 4 5 6 7 8 9 , 逢十进一
十六进制, 0 1 2 3 4 5 6 7 8 9 A B C D E F 逢十六进一

计算机最小的单位是 bit(位), 只有两个数据值 0 和 1
字节: 是计算机中基本的储存单位 byte

1 byte = 8 bit

1KB = 1024 byte
1MB = 1024 KB
1GB = 1024 MB
1TB = 1024 GB
...
100Mbits 200Mbits
12.5MB/s 25MB/s

1.5文件打开模式

文本文件: txt, .py .md 能够使用记事本打开的文件
二进制文件: 具有特殊格式的文件, mp3 mp4 rmvb avi png jpg 等
文本文件可以使用 文本方式打开文件,也可以使用二进制的方式打开文件
二进制文件,只能使用二进制的方式打开文件
二进制打开方式如下: 不管读取,还是书写,都需要使用二进制的数据
rb wb ab
注意点: 不能指定 encoding 参数

encode() 将str 转换为二进制格式的字符串

decode() 将二进制格式的字符串转换为str

f = open('c.txt', 'wb')
f.write('你好'.encode())   # encode() 将str 转换为二进制格式的字符串
f.close()


f1 = open('c.txt', 'rb')
buf = f1.read()
print(buf)
print(buf.decode())
f1.close()

1.6应用-文件备份

  1. 用只读的方式,打开文件
  2. 读取文件内容
  3. 关闭文件
  4. 只写的方式,打开新文件
  5. 将 第 2 步读取的内容写入新文件
  6. 关闭新文件
  7. 思考:

    1. 如果文件比较大,循环读取文件
    2. 复制备份的文件可能是 txt 文件,可能是 二进制文件, ---> 使用二进制方式打开文件

普通备份

# 1. 用只读的方式,打开文件
f = open('a.txt', 'rb')
# 2. 读取文件内容
buf = f.read()
# 3. 关闭文件
f.close()
# 4. 只写的方式,打开新文件
f_w = open('a[备份].txt', 'wb')
# 5. 将 第 2 步读取的内容写入新文件
f_w.write(buf)
# 6. 关闭新文件
f_w.close()

优化备份

file_name = input('请输入要备份的文件名')

# 1. 用只读的方式,打开文件
f = open(file_name, 'rb')
# 2. 读取文件内容
buf = f.read()
# 3. 关闭文件
f.close()

# 根据原文件名,找到文件后缀和文件名
index = file_name.rfind('.')
# 后缀  file_name[index: ]
# 新文件名
new_file_name = file_name[:index] + '[备份]' + file_name[index:]
print(new_file_name)
# 4. 只写的方式,打开新文件
f_w = open(new_file_name, 'wb')
# 5. 将 第 2 步读取的内容写入新文件
f_w.write(buf)
# 6. 关闭新文件
f_w.close()

为什么要用rfind呢,是因为如果文件名为a.b.txt则也可以正确的找到txt后缀

1.7文件和文件夹的操作

1.7.1文件重命名

import os
os.rename("ab.txt", "abcc.txt")

1.7.2删除文件

import os
os.remove("abcc.txt")

1.7.3创建文件夹

import os
os.mkdir("诸葛亮")

1.7.4获取当前目录

import os
os.getcwd()

1.7.5改变默认目录

import os
os.chdir("../")

1.7.6获取目录列表

import os
os.listdir("./")

1.7.7删除文件夹

import os
os.rmdir("诸葛亮")
# 对文件和目录的操作,需要导入 os 模块
import os

# 1. 文件重命名 os.rename(原文件路径名, 新文件路径名)
os.rename('ab.txt', 'abcc.txt')
# 2. 删除文件 os.remove(文件的路径名)
os.remove('abcc.txt')
# 3. 创建目录 os.mkdir(目录路径名)  make directory
os.mkdir('test')
os.mkdir('test/aa')

# 4. 删除空目录  os.rmdir(目录名)  remove directory
os.rmdir('test/aa')
os.rmdir('test')
# 5. 获取当前所在的目录 os.getcwd()  get current working directory
buf = os.getcwd()
print(buf)
# 6. 修改当前的目录 os.chdir(目录名)  change dir
os.chdir('test')
buf = os.getcwd()
print(buf)
# 7. 获取指定目录中的内容,  os.listdir(目录), 默认不写参数,是获取当前目录中的内容
# 返回值是列表, 列表中的每一项是文件名
buf = os.listdir()   # test
print(buf)

1.8应用-批量修改文件名

import os

# 批量创建txt文本
def create_files():
    for i in range(10):
        file_name = 'test/file_' + str(i) + '.txt'
        print(file_name)
        f = open(file_name, 'w')
        f.close()

# 批量创建txt文本
def create_files_1():
    os.chdir('test')
    for i in range(10, 20):
        file_name = 'file_' + str(i) + '.txt'
        print(file_name)
        f = open(file_name, 'w')
        f.close()
    os.chdir('../')  # ../ 上一级目录

# 批量修改文本名字
def modify_filename():
    os.chdir('test')
    buf_list = os.listdir()
    # print(buf_list)
    for file in buf_list:
        new_file = 'py43_' + file
        os.rename(file, new_file)

    os.chdir('../')

# 批量修改文本名字
def modify_filename_1():
    os.chdir('test')
    buf_list = os.listdir()
    # print(buf_list)
    for file in buf_list:
        num = len('py43_')
        new_file = file[num:]
        os.rename(file, new_file)

    os.chdir('../')


# create_files()
# create_files_1()
# modify_filename()
# modify_filename_1()
目录
相关文章
|
21天前
|
计算机视觉 Python
如何使用Python将TS文件转换为MP4
本文介绍了如何使用Python和FFmpeg将TS文件转换为MP4文件。首先需要安装Python和FFmpeg,然后通过`subprocess`模块调用FFmpeg命令,实现文件格式的转换。代码示例展示了具体的操作步骤,包括检查文件存在性、构建FFmpeg命令和执行转换过程。
37 7
|
2月前
|
缓存 Java 索引
[Python]知识点
本文主要介绍了Python的一些高级知识点和使用细节,包括pip的使用、内置函数、列表、元组、字典、集合、变量、Lambda表达式、面向对象编程、异常处理、模块及标准库等。文章适合有一定Python基础的读者,重点在于深入理解和掌握Python的高级特性。文中还提供了大量示例代码,帮助读者更好地理解和应用这些知识点。
43 1
[Python]知识点
|
2月前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
87 2
|
2月前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
|
3月前
|
调度 Python
python知识点100篇系列(20)-python协程与异步编程asyncio
【10月更文挑战第8天】协程(Coroutine)是一种用户态内的上下文切换技术,通过单线程实现代码块间的切换执行。Python中实现协程的方法包括yield、asyncio模块及async/await关键字。其中,async/await结合asyncio模块可更便捷地编写和管理协程,支持异步IO操作,提高程序并发性能。协程函数、协程对象、Task对象等是其核心概念。
|
3月前
|
Python Windows
python知识点100篇系列(24)- 简单强大的日志记录器loguru
【10月更文挑战第11天】Loguru 是一个功能强大的日志记录库,支持日志滚动、压缩、定时删除、高亮和告警等功能。安装简单,使用方便,可通过 `pip install loguru` 快速安装。支持将日志输出到终端或文件,并提供丰富的配置选项,如按时间或大小滚动日志、压缩日志文件等。还支持与邮件通知模块结合,实现邮件告警功能。
python知识点100篇系列(24)- 简单强大的日志记录器loguru
|
3月前
|
自然语言处理 Python Windows
python知识点100篇系列(23)- 使用stylecloud生成词云
【10月更文挑战第10天】`stylecloud` 是 `wordcloud` 的优化版,支持使用 Font Awesome 图标自定义词云形状,操作更简便。本文介绍如何安装 `jieba` 和 `stylecloud` 库,并使用它们生成中文词云。通过 `jieba` 进行分词,再利用 `stylecloud` 的 `gen_stylecloud` 方法生成具有特定形状和颜色的词云图像。
python知识点100篇系列(23)- 使用stylecloud生成词云
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
30天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
19天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
103 80