python之文件读写、目录操作、序列化str操作后写入文档、xml模块、configparser模块

目录

一、文件打开

二、文件读取

三、文件写入

四、操作文件和目录

五、序列化(str)

六、xml模块

关于:ini、yaml/yml、excel文件的python操作封装


一、文件打开

open函数是用来打开文件;格式:open (name[.mode[.buffering]]);

必填参数

1.name(即:文件名或文件路径);

选填参数

1.mode(即:权限模式)、包含:w、r、b、a、+;

2.buffering(即:控制文件的缓冲),如值为0,无缓冲,直接将数据写到硬盘;若为1,有缓冲,在flush()或close()执行后

数据才会更新到硬盘;如为大于1的数字则代表缓冲区大小(字节);如为负数,表示默认缓冲区的大小;

mode值功能描述
r读模式
w写模式
a追加模式
b二进制模式(可添加到其他模式中使用)
+读/写模式(可添加到其他模式中使用)
f=open(r'c:\study\test.txt','r')#默认也是r模式
如果文件不存在,会报错;
如果文件包含汉字,报错:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa0 in position 194: illegal multibyte sequence

f=open(r'c:\study\test.txt','r',encoding='utf-8')#加上编码格式

二、文件读取

read()、readline()、readlines()的区别:

f = open('zhengli','r', encoding='utf-8')
print(f.read(10))  # read(n) n 指的是 光标移动字节位置

由于在文件打开后,都有执行close()方法;但是如果IO异常,close()方法就不会执行;为了代码的健壮性,有两种方式:

1.try……finally……:无论如何都要执行finally后面的代码块;

2.with open(r'xxx.txt','r') as f;

try:
    f = open("../stu001.txt", 'r+')
    print(f.read())
finally:
    if f:
        f.close()
########################################################
with open(r'../stu001.txt','r+') as f:
    print(f.read())
###由于很多文件数据较大,如:配置文件等,readlines()方法更加合理####
with open(r'../stu001.txt','r+') as f:
    for line in f.readlines():
        print(line.strip())

三、文件写入

n=['11111\n','222222\n','333333\n','44444\n','555']
with open(r'../stu001.txt','w') as f:
    for n1 in n:
        f.writelines(n1)

四、操作文件和目录

主要使用的包:os、shutil

# -*-coding:utf-8-*-

# f = open("../stu001.txt",'r+')
# print("-----111-------\n"+f.read())
# f.close()
# f = open("../stu001.txt",'r+')
# print("-----222-------\n"+f.readline())
# f.close()
# f = open("../stu001.txt",'r+')
# print("-----333-------")
# print(f.readlines())
# f.close()



# try:
#     f = open("../stu001.txt", 'r+')
#     print(f.read())
# finally:
#     if f:
#         f.close()
# ########################################################
# with open(r'../stu001.txt','r+') as f:
#     print(f.read())
# ###由于很多文件数据较大,如:配置文件等,readlines()方法更加合理####
# n=['11111\n','222222\n','333333\n','44444\n','555']
# with open(r'../stu001.txt','w') as f:
#     for n1 in n:
#         f.writelines(n1)

import os
'''获得当前python脚本工作的目录路径'''
print(os.getcwd())#   D:\pythonProject\study\study001\
'''获得当前python脚本工作的文件路径'''
print(__file__)#   D:/pythonProject/study/study001/001_file_opearation.py
'''返回指定目录下的所有文件及目录名,默认当前目录路径'''
print(os.listdir("D:\pythonProject\study\study001"))#   ['001_file_opearation.py', '__init__.py']
print(os.listdir())#   ['001_file_opearation.py', '__init__.py']
'''删除一个文件'''
os.remove(r"D:\pythonProject\study\study001\test")
'''删除多个空目录'''
os.removedirs(r"D:\pythonProject\study\study001\test\test001")
'''检验给出的路径是否是一个文件'''
os.path.isfile(r"D:\pythonProject\study\stu001.txt")
'''检验给出的路径是否是一个目录'''
os.path.isdir("D:\pythonProject\study\stu001.txt")
'''判断是否是绝对路径'''
os.path.isabs("D:\pythonProject\study\study001")
'''判断路径是否真的存在'''
os.path.exists("D:\pythonProject\study\study001")
'''分离一个路径的目录名和文件名'''#结果返回一个tuple
print(os.path.split("D:\pythonProject\study\stu001.txt"))#('D:\\pythonProject\\study', 'stu001.txt')
'''分离一个路径的扩展名'''#结果返回一个tuple
print(os.path.splitext("D:\pythonProject\study\stu001.txt"))#('D:\\pythonProject\\study\\stu001', '.txt')
'''获取路径名'''
print(os.path.dirname("D:\pythonProject\study\stu001.txt"))
'''获取文件名'''
print(os.path.basename("D:\pythonProject\study\stu001.txt"))
'''重命名文件或目录'''
os.rename(old,new)
'''创建多级目录'''
os.makedirs(r'D:\pythonProject\study\study001\te')
'''创建单个目录'''
os.mkdir("tes")
'''获取文件属性'''
os.stat("D:\pythonProject\study\stu001.txt")
'''获取文件大小'''
os.path.getsize("D:\pythonProject\study\stu001.txt")

import shutil
'''复制文件夹'''
shutil.copytree("olddir","newdir")#olddir、newdir都只能是目录,且mewdir必须不存在
'''复制文件'''
shutil.copyfile("oldfile","newfile")#oldfile、newfile都只能是文件
shutil.copy("oldfile","new")#oldfile只能是文件,new可以是文件,也可是目标目录
'''移动文件/目录'''
shutil.move('oldpos','newpos')
'''删除目录'''
os.rmdir('dir')#只能删除空目录
shutil.rmtree('dir')#空目录、有内容的目录都可删除

五、序列化(str)

(关联:json序列化:序列化与反序列化(pyhton的json、与JavaScript的JSON)、Form组件返回的error_messages如何转换为dict类型、django序列化_冷凝娇的博客-CSDN博客)

python中提供两个模块:cPickle、pickle;前者是C语言编写的,效率比后者高很多;但是功能是一样的;

try:
    import cPickle as pickle
except ImportError:
    import pickle

pickle实现序列化主要是使用dump方法或dumps方法;dumps方法可以将任意对象序列化成一个str;然后将其写入文件;dump方法可以直接将序列化后的对象直接写入文件中;

n=['11111\n','222222\n','333333\n','44444\n','555']
######################方式一:############################
n_new=pickle.dumps(n)
with open('../stu001.txt','wb') as f:
    f.write(n_new)

######################方式二:############################

with open('../stu001.txt','wb') as f:
    pickle.dump(n,f)

六、xml模块

xml、yaml、configparser等常用模块

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冷凝娇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值