Python3:文件操作

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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


一、文件基础操作

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 中的函数
    
"""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值