Python3:文件操作

本文详细介绍了Python中的文件基础操作,如读写、复制,以及操作系统模块的使用,包括绝对路径、相对路径和实用函数。涵盖了文件复制联系、图书管理系统实例,适合学习者深入理解文件操作和系统管理。


**注意: 文中相关的路径和文件需要根据实际情况替换。**


一、文件基础操作

1. 基本读写操作

代码如下(示例):

"""
文件基本操作
    mode
        r:读(纯文本)
            read(): 读取所有内容
            readline():每次读取一行内容
            readlines():读取所有的行保存的列表
            readable():判断是否有可读的
        w:写(纯文本)
            write()
            writelines():自己加换行
            注意:
                写操作write(s),每次都会清空原来的内容清空,写当前的内容
        rb:读二进制(图片、视频、音乐等)
        wb:写二进制()
    opr:
        open(path/fileName,mode='rt')   默认是gbk编码方式;decode       返回是流对象
            如果传递文件名有误,抛异常 FileNotFoundError

"""
print("读文件".center(20, "*"))
# 读取文本

stream = open(file=r'f:\test.txt', encoding='utf8')

# line = stream.readline()
# print(line)  #
# content = stream.read()
# print(content)

flag = stream.readable()
print(flag)

# while True:
#     line = stream.readline()
#     print(line)
#     if not line:
#         break


lines = stream.readlines()
print(lines)
# 读取binary文件:图片
stream = open(file=r'f:\test.jpg', mode='rb')
pic = stream.read()
print(pic)
stream.close()

print("写文件".center(20, "*"))

stream = open(file=r'f:\test.txt', mode='w', encoding='utf8')
s = '''
统一代码管理
	统一代码管理 GitLib,是基于 Git 的代码管理平台,数十万企业正在使用,提供代码托管、代码评审、代码扫描、质量检测、持续集成等功能,全方位保护企业代码资产,帮助公司实现安全、稳定、高效的代码托管和研发管理。
统一开发工具
	”工欲善其事,必先利其器“,统一开发工具为流程中的每一步提效交付更迅捷
统一规范标准
	”车同轨,书同文“,统一规范标准为研发人员必须遵循的最低规范要求,无论什么产品,什么项目,都必须得严格遵守。
统一平台及技术栈
	统一平台及技术栈解决不统一带来的开发效率问题,系统维护成本显著增加,统一技术选型,降低团队学习成本;完善技术生态,技术方案提取和复用,提高开发效率。
统一组件库
	组件是对数据和方法的简单封装,随着开发与设计、策划、产品等岗位的密切协作,为了统一沟通语言,设计、产品等岗位也在广泛的使用组件这一概念。统一组件库可以提升工作能效和开发质量。
'''
result = stream.write(s)  # 返回写了几个字符
print(result)

result = stream.write('hello world!')
result = stream.write(' 张三')
result = stream.writelines(["你好吗?\n", '一起去吃饭可以,有时间\n'])
print(result)
stream.close()

print("写文件:不清空!".center(20, "*"))
stream = open(file=r'f:\test.txt', mode='a', encoding='utf8')

result = stream.write("新增")
print(result)

2. 文件复制操作

代码如下(示例):

import os

# 文件复制
"""
 原文件:F:\test.jpg
 目标文件:F:\test.jpg

 with: 结合open使用,自动释放资源
 open:只能是文件
 
 os.path : 对系统中文件的操作
    os.path.dirname 获取文件夹
    os.path.join 拼接路径

"""
print("复制文件".center(30, "*"))
with open(r"F:\test.jpg", 'rb') as r_stream:
    content = r_stream.read()
    abs_file_name = r_stream.name
    print(abs_file_name)
    start_index = abs_file_name.rfind("\\") + 1
    print(abs_file_name[start_index:])  # 截取文件名
    with open(r"F:\test1.jpg", 'wb') as w_stream:
        w_stream.write(content)

print("文件复制完成!")

print("批量复制文件".center(30, "*"))

print(os.path)
path = os.path.dirname(__file__)
print(path)  # 当前文件的路径
print(type(path))

new_path = os.path.join(path, "test.jpg")
print(new_path)

print("复制文件到当前文件夹下".center(30, "*"))
with open(r"F:\test.jpg", 'rb') as r_stream:
    content = r_stream.read()
    new_path = os.path.join(os.path.dirname(__file__), "test.jpg")
    with open(new_path, 'wb') as w_stream:
        w_stream.write(content)
print("end-------------完成文件复制")

二、操作系统模块

1.基础系统操作

代码如下(示例):

#  os 模块
import os
import shutil

dir = os.getcwd()

# 遍历
result = os.listdir(dir)  # 返回当前文件中的文件夹和文件,返回列表
print(result)

# 创建目录
new_dir = os.path.join(dir, "copy_file")
print(new_dir)
if not os.path.exists(new_dir):  # 目录不存在,创建
    os.mkdir(new_dir)  # 创新新目录
if os.path.exists(new_dir):
    shutil.rmtree(new_dir)  # 删除
    shutil.copytree(dir, new_dir)
print('copy dir finished!')
# f = os.rmdir(new_dir)  # 只能删除空文件夹
# os.removedirs(new_dir)  # 删除多个目录
# print(f)

print("清空文件夹,并删除目录".center(30, "*"))
# 遍历删除文件夹中文件和目录
new_result = os.listdir(new_dir)
for file in new_result:
    file_path = os.path.join(new_dir, file)
    os.remove(file_path)
else:
    os.rmdir(new_dir)  # 删除目录

print("切换目录".center(30, "*"))

f = os.chdir("../dictionary")
print(f)
print(os.getcwd())

2.绝对路径和相对路径

代码如下(示例):

# 文件路径操作
import os.path

# 绝对路径
print(os.path.abspath(__file__))  # 获取绝对路径
print(os.path.isabs(__file__))  # 判断是否是绝对路径

# 相对路径
os.path.isabs("/")
print(os.path.isabs("./test.jpg"))

# 获取文件夹
path1 = os.path.dirname(__file__)  # 绝对路径,文件夹
path2 = os.path.abspath(__file__)  # 通过相对路径获取当前文件的绝对路径

print(path1, path2)

path3 = os.getcwd()  # 获取当前文件夹类似os.path.dirname(__file__)

print(path3)

# 获取文件路径
result = os.path.split(path2)  # 目录+ 文件名字
print(result)

print(result[1])

suf = os.path.splitext(path2)  # 获取扩展名
print(suf)

size = os.path.getsize("test.jpg") #获取文件大小,单位是字节
print(size)

该处使用的url网络请求的数据。


三、练习

1. 拷贝联系

#  工具类

#  copy
import os.path


def copy(source, target):
    if not os.path.exists(target):
        os.mkdir(target)
    if os.path.isdir(source) and os.path.isdir(target):
        file_list = os.listdir(source)
        for file in file_list:
            path = os.path.join(source, file)
            with open(path, 'rb') as r_stream:
                content = r_stream.read()
                target_file = os.path.join(target, file)
                with open(target_file, 'wb') as w_stream:
                    w_stream.write(content)
        else:
            print("拷贝完成!")


# 调用函数
src = os.getcwd()
print(src)
tgt = os.path.join(src, "new_copy_file")
src = "E:\\workspace\\python\\demo-python\\dictionary"
print(tgt)
copy(src, tgt)

2. 图书管理系统

#  工具类

#  copy
import os.path


def copy(source, target):
    if not os.path.exists(target):
        os.mkdir(target)
    if os.path.isdir(source) and os.path.isdir(target):
        file_list = os.listdir(source)
        for file in file_list:
            path = os.path.join(source, file)
            with open(path, 'rb') as r_stream:
                content = r_stream.read()
                target_file = os.path.join(target, file)
                with open(target_file, 'wb') as w_stream:
                    w_stream.write(content)
        else:
            print("拷贝完成!")


# 调用函数
src = os.getcwd()
print(src)
tgt = os.path.join(src, "new_copy_file")
src = "E:\\workspace\\python\\demo-python\\dictionary"
print(tgt)
copy(src, tgt)

user_book.txt:

sanduo:三国演义->水浒传
sanduo:鬼吹灯->倩女幽魂
sanduo:盗墓笔记->斗罗大陆
sanduo:鬼吹灯
sanduo:倩女幽魂

users.txt:

sandduo 123456
sanduo 123

books.txt:

斗罗大陆
斗破苍穹
三国演义
水浒传
诛仙
倩女幽魂
盗墓笔记
鬼吹灯

总结

这里对文章进行总结:

# 复习
"""
文件操作:
    open(path,mode)
        mode------>r
            s.read()
            s.readline()
            s.readlines()
            s.readable()

        with open('') as r_stram:
            pass
        mode------>w
            s.write()
            s.writelines()
            s.writeable()
         with open('','w') as w_stram:
                    w_stram.write('hello')

    os.path: os模块,常用函数
        os.path.abspath() 绝对路径
        os.path.dirname() 获取路径
        os.path.isabs() 判断是否是绝对路径
        os.path.getcwd() 获取文件夹
        os.path.join() 路径拼接
        os.path.split() 获取文件路径
        os.path.splitext() 扩展名
        os.path.getsize() 获取文件大小,单位是字节
        os.path.isfile()  是文件
        os.path.isdir() 是文件夹

    os 中的函数
    
"""

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sanduo112

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

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

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

打赏作者

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

抵扣说明:

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

余额充值