Python自学第十五天——文件及其操作

作为新手自学Python的第十五天,技术低微,希望可以通过这种方式督促自己学习。

个人学习环境:python3.9,PyCharm 2021.3.2 (Community Edition)


1、常见的字符编码格式

Python的解释器使用的是Unicode(内存)

.py文件在磁盘上使用UTF-8存储(外存)

 

2、Python中修改编码格式

2.1 第一种

在文件首行加注释为

# encoding=gbk

将此.py文件的编码格式指定为gbk格式

2.2 第二种

在文件首行加注释为

# -*- coding:gbk -*-

也可以将此.py文件的编码格式指定为gbk格式

3、文件读写原理

文件的读写俗称“IO操作”

3.1 原理——队列

遵循先进先出原则(FIFO原则)

 

3.2 文件的读写操作

3.2.1 内置函数open()创建文件对象

open()函数是在计算机中打开或者创建一个文件,并通过IO操作建立联系,从而完成文件操作

3.2.2 语法规则

file = open(filename [, mode, encoding])

其中,file ——> 被创建的文件对象

filename ——> 要创建或打开的文件名称

mode ——> 打开模式默认为只读

encoding ——> 默认文本文件中字符的编写格式为GBK

a.txt文件内容如下:

file = open('a.txt', 'r', encoding='utf-8')
print(file.readlines())  # 读取结果为一个列表
file.close()
"""
结果为:
['中国\n', '你好']
"""

代码输入时不能忘记encoding='utf-8',否则会抛出如下的错误

3.3 常用的文件打开模式

3.3.1 文件的类型

按文件中数据的组织形式,文件分为以下两大类

文本文件:存储的是普通“字符”文本,默认为Unicode字符集,可以使用记事本程序打开

二进制文件:把数据内容用“字节”进行存储,无法用记事本打开,必须使用专用的软件打开

打开模式描述
r以只读模式打开文件,文件的指针将会放在文件的开头
w以只写模式打开文件,如果文件不存在则创建,如果文件存在则覆盖原有内容,文件指针在文件的开头
a以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在源文件末尾
b以二进制方式打开文件,不能单独使用,需要与其他模式一起使用(rb或者wb)
+以读写方式打开文件,不能单独使用,需要与其他模式一起使用(a+)

创建b.txt,并写入helloworld

file = open('b.txt', 'w', encoding='utf-8')
file.write('helloworld')
file.close()

复制logo.jpg图片(自己在文件夹内准备一个图片即可)

src_file = open('logo.jpg', 'rb')
​
target_file = open('copylogo.jpg', 'wb')
​
target_file.write(src_file.read())
​
target_file.close()

3.4 文件对象的常用方法

方法名说明
read([size])从文件中读取size个字节或字符的内容返回。若省略[size],则读取到文件末尾(一次读取文件所有内容)
readline()从文本文件中读取一行内容
readlines()把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
write(str)将字符串str内容写入文件
writelines(s_llist)将字符串列表s_list写入文本文件,不添加换行符
seek(offset[,whence])把文件指针移动到新的位置,offset表示相对于whence的位置
tell()返回文件指针的当前位置
fiush()把缓冲区的内容写入文件,但不关闭文件
close()把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源
file = open('a.txt', 'r', encoding='utf-8')
# print(file.read(2))
# print(file.readline())
print(file.readlines())
file.close()

注意:

使用了read或者readlines文件流会被占用,之后再使用得到的只能是空字符(先read再readline)或者空列表(先readlines再readline)

file = open('c.txt', 'a', encoding='utf-8')  # 创建c.txt文件并进行写入操作
file.write('hello')  # 将hello字符串写入文件c.txt
lst = ['Java', 'Go', 'Python']
file.writelines(lst)    # 将 Java, Go, Python 字符串列表写入文件c.txt
file.close()

seek(offset[,whence]) 中,offset表示相对于whence的位置;offset:为正时往结束方向,为负时往开始方向移动;

whence不同的值代表不同含义:

0:从文件开始进行计算(默认值)

1:从当前位置开始计算

2:从文件末尾开始计算

file = open('a.txt', 'r', encoding='UTF-8')
file.seek(3)
print(file.read())
print(file.tell())
file.close()

关于flush()和close():

Python向文件中写入数据时并不会立刻写入,而是写到缓冲区等待清空的时候写入文件,而flush()可以将缓冲区内容写入文件并清空缓冲区,从而达到不同close()就能写入文件。

清空之后无论使用多少次write()都会在末尾写入而不是重新覆盖

file = open('d.txt', 'a', encoding='utf-8')
file.write('hello')
file.flush()
file.write('world')
file.close()

4、with语句(上下文管理器)

with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的。

with open('a.txt', 'r', encoding='utf-8') as file:
    print(file.read())

with语句的原理可以用以下代码来理解

"""
MyContentMgr实现了特殊方法__enter__(),__exit__()称为该类对象,遵守了上下文管理器协议
该类对象的实例对象,称为上下文管理器
"""
​
​
class MyContentMgr(object):
    def __enter__(self):
        print('enter方法被调用执行')
        return self
​
    def __exit__(self, exc_type, exc_val, exc_tb):
        print('exit方法被调用执行')
​
    @staticmethod
    def show():
        print('show方法被调用执行了')
​
​
with MyContentMgr() as file:    # 相当于file = MyContentMgr()
    file.show()

他的输出结果为

"""
enter方法被调用执行
show方法被调用执行了
exit方法被调用执行
"""

说明使用MyContentMgr()时,先是开始执行enter方法, 然后执行我们调用的show方法,最后自动调用exit方法,关闭文件,防止资源卡顿。在这里即使在show方法中产生异常使系统报错,enter和exit方法依旧执行。

举例:使用with语句复制logo.jpg图片

with open('logo.jpg', 'rb') as src_file:
    with open('copy2logo.jpg', 'wb') as target_file:
        target_file.write(src_file.read())

5、OS模块

os模块中的语句执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。

os模块与os.path模块都可以对目录或文件进行操作

5.1 os模块操作目录相关函数

函数说明
getcwd()返回当前的工作目录
listdir(path)返回指定路径下的文件和目录信息
mkdir(path[, mode])创建目录
makedirs(path1/path2...[, mode])创建多级目录
rmdir(path)删除目录
removedirs(path1/path2...)删除多级目录
chdir(path)将path设置为当前工作目录
import os
print(os.getcwd())
lst = os.listdir('../chap3')
print(lst)
os.mkdir('newdir2')
os.makedirs('A/B/C')
os.rmdir('newdir2')
os.removedirs('A/B/C')
os.chdir('D:\\pythonProject\\chap2')
print(os.getcwd())

5.2 os.path模块操作目录相关函数

函数说明
abspath(path)用于获取文件或目录的绝对路径
exists(path)用于判断文件或目录是否存在,如果存在返回True,否则返回False
join(path, name)将目录与目录或者文件名拼接起来
splitext()分离文件名和扩展名
basename(path)从一个目录中提取文件名
dirname(path)从一个路径中提取文件路径,不包括文件名
isdir(path)用于判断是否为路径

案例:要求列出指定路径下所有的python文件

import os
path = os.getcwd()  # 获取当前目录
lst = os.listdir(path)    # 获取路径下的所有文件
for filename in lst:
    if filename.endswith('.py'):
        print(filename)

案例:遍历指定路径下的所有文件

import os
path = os.getcwd()
lst_files = os.walk(path)   # walk遍历指定路径下的所有文件以及目录
print(lst_files)
for dirpath, dirname, filename in lst_files:
    # print(dirpath)
    # print(dirname)
    # print(filename)
    # print('_______________________')
    for dir in dirname:
        print(os.path.join(dirpath, dir))
​
    for file in filename:
        print(os.path.join(dirpath, file))
    print('_______________________')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,今天我们来学习Python中的字典(Dictionary)。 字典是一种无序的、可变的数据类型,它以键值对(key-value)的形式存储数据,其中键(key)必须是唯一的,而值(value)可以是任意数据类型。字典用花括号{}表示,每个键值对之间用逗号隔开。 下面是一个简单的字典示例: ``` my_dict = {'name': '张三', 'age': 18, 'gender': '男'} ``` 这个字典中,'name'、'age'、'gender'就是键,而'张三'、18、'男'就是相应的值。 可以使用`dict()`函数来创建一个字典,也可以使用`{}`来创建一个空字典。 接下来,我们来看一些常用的字典操作。 1. 访问字典元素 可以通过键来访问字典中的元素,例如: ``` print(my_dict['name']) # 输出:张三 ``` 如果键不存在,则会抛出KeyError异常。 2. 修改字典元素 可以通过键来修改字典中的元素,例如: ``` my_dict['age'] = 20 print(my_dict) # 输出:{'name': '张三', 'age': 20, 'gender': '男'} ``` 3. 添加字典元素 可以通过键来添加字典中的元素,例如: ``` my_dict['address'] = '北京市' print(my_dict) # 输出:{'name': '张三', 'age': 20, 'gender': '男', 'address': '北京市'} ``` 4. 删除字典元素 可以通过键来删除字典中的元素,例如: ``` del my_dict['gender'] print(my_dict) # 输出:{'name': '张三', 'age': 20, 'address': '北京市'} ``` 5. 字典长度 可以使用`len()`函数来获取字典的长度,例如: ``` print(len(my_dict)) # 输出:3 ``` 6. 字典遍历 可以使用`items()`方法来遍历字典中的每一个键值对,例如: ``` for key, value in my_dict.items(): print(key, value) ``` 输出: ``` name 张三 age 20 address 北京市 ``` 通过上述操作,我们可以初步了解字典的基本用法。在实际应用中,字典是非常重要的数据类型,它可以用来存储和处理各种复杂的数据结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wei730050

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值