python 文件操作

文件操作

文件的目的就是把数据存起来(持久化), 而不必每次都重新生成.


1-文件的基本操作
  • 打开文件
# w 写入模式  r 读取模式
f = open('123.txt', 'w')
  • 关闭文件
    # 新建一个文件,文件名为:123.txt
    f = open('123.txt', 'w')

    # 关闭这个文件
    f.close()

  • 自动关闭文件
with open("123.txt", "w") as f:
    pass  # 执行完缩进代码, 会自动关闭文件

  • 访问模式

访问模式					   		说明
	r			只用于读取, 默认模式。文件不存在,会报错。
	w			只用于写入。文件存在则先清空内容, 文件不存在,创建新文件。
	a			只用于写入。文件存在则追加内容, 文件不存在,创建新文件。
	r+			用于读写。文件不存在,会报错。
	w+			用于读写。文件存在则先清空内容, 文件不存在,创建新文件。
	a+			用于读写。文件存在则追加内容, 文件不存在,创建新文件。
	rb			二进制格式的只读操作。
	wb			二进制格式的只写操作。
	ab			二进制格式的追加操作。
  • with open () 基本操作
# read() 将所有的内容全部读取出来
with open('123.txt') as f:
    content = f.read()
    print(content)


# read(n)  指定读取的字符数
with open('123.txt') as f:
    content = f.read(4)
    print(content)


# readline() 每次读一行
with open('123.txt') as f:
    while True:
        content = f.readline()  # hello\n  python
        if len(content) == 0:
            break
        print(content, end="")  # print()会默认换行(会在结尾自动添加\n), 可以通过end参数手动设置结尾的内容


# readlines() 读取出所有内容  每行一个元素,返回列表
with open('123.txt') as f:
    content = f.readlines()
    print(content)
    
#  open() 返回一个 可迭代的文件对象
with open('123.txt') as f:
    try:
    	for line in f:
    		print(line)
    finally:
    	f.close()
# 无论文件大小, 迭代器会一行一行读入,不会占满内存
for line in open(file_path, "r"):
    print(line)
  • 文件的相关操作

有些时候,需要对文件进行重命名、删除等一些操作,python的os模块中都有这些功能

  • 文件重命名
  • 删除文件
  • 创建文件夹
  • 获取当前目录
  • 改变默认目录
  • 获取目录列表
  • 删除文件夹
import os 
# 获取 桌面路径
os.path.join(os.path.expanduser('~'),"Desktop")

# 获取当前文件的绝对路径
os.path.dirname(__file__)

# 文件重命名  文件操作中都是对路径进行处理,不是对文件名进行处理
os.rename("123.txt", "666.txt")

# 文件删除
os.remove("666.txt")


# 创建文件夹
os.mkdir("demo")

# 获取当前路径  默认为项目目录
print(os.getcwd())

# 修改当前路径
os.chdir("demo")
print(os.getcwd())
os.mkdir("demo2")

# 列出目录中的内容(子文件夹和文件)
print(os.listdir())  # 默认列出当前路径

# 删除空文件夹
os.rmdir("demo")


文件高级操作
  • 光标的偏移
# 文件读写都会导致文件定位移动(光标移动)
with open("123.txt", 'w+') as f:
    # 文件的tell方法可以查看当前定位
    print(f.tell())
    f.write("hello python")
    # 可以使用文件的seek方法 修改文件定位
    # 参数whence 0 表示移动光标到文件开头 1 表示当前位置不变 2 表示移动光标到文件末尾
    # 参数offset 基于whence设置偏移 seek(2, 0) 先移动光标到文件开头,再向右移动两个位置
    # offset只能对文件开头设置偏移 whence=1 或 2, offset只能是0
    f.seek(0, 1)
    print(f.tell())
    f.seek(0, 0)
    print(f.tell())
    content = f.read()
    print("内容为:%s" % content)
  • 删除非空文件夹

import os


def custem_rmdir(path):
    """
    删除非空文件夹
    :param path: 文件夹路径
    :return: None
    """
    # 判断是文件夹是否为空
    if len(os.listdir(path)):
        # 遍历其中的内容 将这些内容全部删除
        for sub_name in os.listdir(path):
            # print(sub_name)
            # 判断是文件还是文件夹
            sub_path = os.path.join(path, sub_name)
            if os.path.isfile(sub_path):  # 是文件就删除
                os.remove(sub_path)
            else:  # 是文件夹, 就递归
                custem_rmdir(sub_path)

    os.rmdir(path)


if __name__ == '__main__':
    path = 'test'
    custem_rmdir(path)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值