【Python 33】文件操作

目录

1、编码格式介绍

2、文件的读写原理

3、文件读写操作

4、文件对象常用的方法

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

6、目录操作


1、编码格式介绍

python文件默认的编码格式是:UTF-8

在代码文件中前面添加编码格式:endoding=GBK

2、文件的读写原理

 

3、文件读写操作

 

# encoding=UTF-8
# 作   者:要努力,努力,再努力
# 开发日期:2022/4/24 10:32

file = open('a.txt', 'r')
print(file.readlines())
file.close()

 代码输出:['中国\n', '美丽']

 

 打开模式描述
r以只读模式打开文件,文件的指针将会放在文件的开头
w以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针在文件的开头
a以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾
b以二进制方式打开文件,不能单独使用,需要与共它模式一起使用,rb,或者wb
+以读写方式打开文件,不能单独使用,需要与其它模式一起使用,a+
# encoding=UTF-8
# 作   者:要努力,努力,再努力
# 开发日期:2022/4/24 10:32

file = open('a.txt', 'a')
file.write('helloworld')
file.close()

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

4、文件对象常用的方法

 

方法名说明
read([size])从文件中读取 size 个字节或字符的内容返国。若宿略[size],则读取到文件末尾,即一次读取文忤所有内容
readline()从文本文件中读取一行内容
readlines()把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
write(str)将字符串 str 内容写入文件
writelines(s_list)将字符串列表s_list写入文本文件,不添加换行符
seek(offset[, whence])

把文件指针移动到新的位置,offset 表示相对于 whence 的位置:

offset :为正往结束方向移动,为负往开始方向移动

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

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

1: 从当前位置开始计算
2: 从文件尾开始计算

tell()返回文件指针的当前位置
flush()把缓冲区的内容写入文件,但不关闭文件
close()把缓冲区的内容写入文件,同时关闭文件。释放文件对象相关资源

 read、 readline 、readlines 示例:


# 作   者:要努力,努力,再努力
# 开发日期:2022/4/24 11:20

file = open('a.txt', 'r')
# print(file.read(2))
# print(file.readline())  # 读一行
print(file.readlines())  # 读多行
file.close()

write、 writelines 示例:


# 作   者:要努力,努力,再努力
# 开发日期:2022/4/24 11:20

file = open('b.txt', 'a')
# file.write('hello')
lst = ['java', 'python', 'go']
file.writelines(lst)
file.close()

 seek、tell 示例:

file = open('a.txt', 'r')
file.seek(2)
print(file.read())
print(file.tell())
file.close()

flush示例:

# 作   者:要努力,努力,再努力
# 开发日期:2022/4/24 11:40

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

 

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

下面的代码可以不用写 file.close() ,因为引用了上下文管理器:

# 作   者:要努力,努力,再努力
# 开发日期:2022/4/24 11:44

with open('a.txt', 'r') as file:
    print(file.read())

 

# 作   者:要努力,努力,再努力
# 开发日期:2022/4/24 11:52

"""
MyContentMgr实现了两个特殊方法: __enter__ 和 __exit__ ,遵守上下文内容管理器协议

"""


class MyContentMgr(object):

    def __enter__(self):
        print('调用了 enter 方法')
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('调用了 exit 方法')

    def show(self):
        print('调用了show方法')
        # print('调用了show方法', 1/0)


with MyContentMgr() as file:  # 相当于 file = MyContentMgs()
    file.show()

拷贝图片的代码可简写成这样:

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

6、目录操作

os 模块是 Python 内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。
os 模块与 os.path 模块用于对目录或文件进行操作。

  os 操作:

函数说明
getcwd()返回当前的工作目录
listdir(path)返回指定路径下的文件和目录信息
mkdir(path[,mode])创建目录
makedirs(path1/path2...[, mode])创建多级目录
rmdir(path)删除目录
removedirs(path1/path2......)删除多级目录
chdir(path)将path设置为当前工作目录
# 作   者:要努力,努力,再努力
# 开发日期:2022/4/24 12:15

# os 模块与操作系统相关的模块

import os
# os.system('notepad.exe')
# os.system('calc.exe')
# os.startfile('D:\\Softwear\\QQ\\Bin\\qq.exe')

print(os.getcwd())

lst = os.listdir('../chap15')
print(lst)

# os.mkdir('newdir')
# os.makedirs('A/B/C')
# os.rmdir('newdir')
# os.removedirs('A/B/C')

os.chdir('D:\\Learning\\workspace\\Pycharm\\20220409\\chap14')
print(os.getcwd())

 os.path操作:

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

 

# 作   者:要努力,努力,再努力
# 开发日期:2022/4/24 12:39

import os.path
print(os.path.abspath('demo8.py'))
print(os.path.exists('demo3.py'), os.path.exists('nnn.py'))
print(os.path.join('E:\\Python', 'demo3.py'))
print(os.path.split('D:\\Learning\\workspace\\Pycharm\\20220409\\chap15\\demo8.py'))
print(os.path.splitext('demo8.py'))
print(os.path.basename('D:\\Learning\\workspace\\Pycharm\\20220409\\chap15\\demo8.py'))
print(os.path.dirname('D:\\Learning\\workspace\\Pycharm\\20220409\\chap15\\demo8.py'))
print(os.path.isdir('D:\\Learning\\workspace\\Pycharm\\20220409\\chap15\\demo8.py'))
print(os.path.isdir('D:\\Learning\\workspace\\Pycharm\\20220409\\chap15'))

示例:列出指定目录下的所有.py 文件

# 作   者:要努力,努力,再努力
# 开发日期:2022/4/24 12:46
# 列出指定目录下的所有.py 文件

import os
path = os.getcwd()
lst = os.listdir(path)
for filename in lst:
    if filename.endswith('.py'):
        print(filename)

 walk: 把当前目录下的子文件也遍历出来

# 作   者:要努力,努力,再努力
# 开发日期:2022/4/24 12:50
import os
import os.path
path = os.getcwd()
lst_files = os.walk(path)
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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不菜不菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值