【Python基础篇】文件和目录操作

1. 文件与持久化

        常用的文件类型:数据文件,配置文件,日志文件,数据库文件,声音和图像文件等
 
""" 读取的过程:1.打开文件;2.读取文件;3.关闭文件
r:read;w:write;a+:读写
"""
# 相对路径 绝对路径,读取文件
# 方法一
file = open('data.txt', 'r')
# 方法二
file = open(r'd:\data.txt', 'r')
# 方法三
file = open('d:\\data.txt', 'r')

print(file.readable()) # 文件是否可读
print(file.writable()) # 文件是否可写

file.seek(6) # 跳过6个字符
file.read(6) # 读取6个字符

# 文件按行读取并打印
data = file.readline()
while data:
     print(data, end='') # end='': 表示不会自动换行
     data = file.readline()

# 文件全部读取并打印
datas = file.readlines()
print(type(datas)) # <class 'list'>
for line in datas:
     print(line, end='')
⚠️ file.close() # 如果关闭文件前,抛异常,则该句无法执行
解决方案:使用 with关键字,不用关系close()什么时候被调用,系统会自动关闭文件
 
with open('data.txt', 'r') as file:
     datas = file.readlines()
     print(type(datas))
     for line in datas:
         print(line, end='')

2. 文件的读写

        读取文件示例: 读取配置文件
 
# app.config
# This is database config file
db_url=xx.xx.xx.xxx
db_port=1521
db_user=admin
db_pass=passward

# appConfig.py
configData = dict()
# 读取文件
with open('app.config', 'r') as file:
    lines = file.readlines()
    for line in lines:
    if not line.startswith("#"):
        key = line.split("=")[0]
        value = line.split("=")[1].replace("\n", "")
        configData[key] = value

if __name__ == "__main__":
print(configData)
        写入文件示例
"""写入文件
    w: 文件清空再写入
    a: 文件末尾追加写入
"""
with open('data_write.txt', 'a') as file:
datas = ['hello python', 'i am sniper', 'like']

# writelines的参数既可以是列表也可以是字符串
# file.writelines([data+'\n' for data in datas])
# file.writelines("\n".join(datas))

# write的参数是字符串
file.write("\n".join(datas))
        文件打开方式汇总:
rwa
r+w+a+
rb:打开二进制文件(声音、图像、视频)wbab
rb+wb+ab+
⚠️ 与‘r’相关的读取(上述表格第一列)操作,需要文件已存在,否则报错;
与‘w’相关的读取(上述表格第二、三列)操作,文件不存在

3. 字符的编码问题

with open('data_cn.txt', 'w') as file:
    file.write("人生苦短,我用python")

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

# python encoding的默认值:GBK ; pycharm的是 utf-8
with open('data_cn_1.txt', 'r', encoding='utf-8') as file:
    print(file.read())

4. 目录及其他操作

        目录操作相关模块:os\os.path(os.path:当前工作模块的目录)
常规操作:目录/文件
 
import os
import shutil

print('data.txt文件是否存在:', os.path.exists('data.txt'))
print('data1.txt文件是否存在:', os.path.exists('data1.txt'))

print('程序运行当前目录:', os.getcwd())

dirname = "dir_demo"
if not os.path.exists(dirname):
    # 创建目录,若是\dir_demo\subdir这类多级目录结构,要求上层的都已创建,否则报错
    # os.mkdir(dirname)

    # 创建目录,支持创建多级目录结构:\dirdemo\subdir:较常用
    os.makedirs("dir_demo\subdir")
else:
    # 删除目录, 但目录必须得是空的
    # os.rmdir(dirname)

    # 删除非空文件夹, 谨慎使用
    shutil.rmtree(dirname)
遍历:目录/文件
 
# 遍历文件夹下的子目录和文件:方法一
filenames = os.listdir(os.getcwd())
for fname in filenames:
    print(fname)

# 遍历文件夹下的子目录和文件:方法二, 除了遍历,还继续递归子目录
for files in os.walk(os.getcwd()):
    print(files)

# 序列解包
for dirpath, subdirs, files in os.walk(os.getcwd()):
    for name in subdirs:
        print("目录", os.path.join(dirpath, name))

    for name in files:
        print("文件", os.path.join(dirpath, name))

# 删除文件, 但要求文件存在
if os.path.exists("data_write.txt"):
    os.remove("data_write.txt")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值