python操作文件(办公自动化)

目录

1、批量创建文件夹

2、创建多个层级目录

3、当前路径下创建多个层级目录

4、创建文件

5、文件整理

6、os.scandir获取文件名、文件路径、判断是否文件夹

7、层级搜索

8、获取指定路


import os
import shutil
# 创建单个文件夹
# os.mkdir("text")

# 创建多个文件夹
# d_list=['a','b','c']
# for i in d_list:
#     os.makedirs(i)

# 判断路径是否存在
# print(os.path.exists('text'))

# 如果不存在就创建
# if not os.path.exists('text'):
#     os.mkdir('text')

# 路径拼接
# print(os.path.join('D:\python\办公自动化\自动发送邮件', "demo.py", ))  # D:\python\办公自动化\自动发送邮件\demo.py
# print(os.path.join('D:\python\办公自动化\自动发送邮件', "案例", "demo.py", ))  # D:\python\办公自动化\自动发送邮件\案例\demo.py

# 获取当前路径下的所有文件
# print(os.listdir('D:\python\办公自动化\自动发送邮件'))  # ['python登入.py']

# 获取当前路径下的所有文件和文件夹,可返回文件名,路径,是否文件夹
# for file in os.scandir(r"D:\demo"):
#     print(file.name, file.path, file.is_dir())  
#     if file.is_dir():
#         pass
#     else:
#         print(file.name)

# 删除文件
# os.remove('text.py')

# 删除空文件夹
# os.rmdir('text')

# 删除非空文件夹
# shutil.rmtree('text')


# 复制、移动
# 移动文件shutil.move(源文件路径,目标文件路径)
# shutil.move(r"D:\python\办公自动化\自动发送邮件\text.py","D:\python\办公自动化")

# 复制文件 shutil.copy(源文件路径,目标文件路径) copyfile功能一样
# shutil.copy(r"D:\python\办公自动化\text.py",r"D:\python\办公自动化\自动发送邮件\text.py")
# shutil.copyfile(r"D:\python\办公自动化\text.py",r"D:\python\办公自动化\自动发送邮件\text.py")

# 复制文件夹
# shutil.copytree(r"D:\python\办公自动化\text",r"D:\python\办公自动化\自动发送邮件\text")

# 修改文件
# os.rename('原名称',"新名称")

# 将文件名和扩展名分开(通过索引返回)
os.path.splitext(r"C:\Users\HP\Desktop\商业分析.xlsx")
# 返回:('C:\\Users\\HP\\Desktop\\商业分析', '.xlsx')

1、批量创建文件夹

import os
file = r"C:\Users\Administrator\Desktop\测试"
name = ['城北','城东','城南','城西','红光','红岭','黄排','蕉田','金光','莲花','南湖',
      '青云','泰园','园岭','湖榕','惠园','福田','华侨城','百丘田','陈塘','碧山','光明','坣陂','三联','六德']
for i in name:
    if not os.path.exists(file + "/" + str(i)):
        os.mkdir(file + "/" + str(i))  # 指定路径
    else:
        print('文件夹已存在')

2、创建多个层级目录

import os
file = r"C:\Users\Administrator\Desktop\测试"
if not os.path.exists(file + "/" + '1/2/3/4/5/6/7/8'):
    os.makedirs(file + "/" + '1/2/3/4/5/6/7/8')
    print('创建成功')
else:
    print('目标路径已存在')

3、当前路径下创建多个层级目录

os.path.dirname(__file__)  # 当前文件的文件夹

import os
start_path = os.path.dirname(__file__)  # 当前文件的文件夹
target_path = os.path.join(start_path,'demo1/demo2/demo3')
print(target_path)

if not os.path.exists(target_path):
    os.makedirs(target_path)
    print('创建成功')
else:
    print('目标路径已存在')

4、创建文件

import os
name_list = ['杨幂',"杨迪",'杨紫','杨洋']
file = r"C:\Users\Administrator\Desktop\测试"
for name in name_list:
    file_name = file + "/" + name + ".text"
    with open(file_name,"w",encoding='utf-8') as f1:
        f1.write(name)

5、文件整理

根据后缀整理文件到相应的文件夹中

import os
import shutil
def move_file(type_file):
    # 原路径
    old_path = os.path.join(base_path, filename)  # C:\Users\Administrator\Desktop\测试\bbb.mp4
    # 目标路径
    new_path = os.path.join(base_path, type_file, filename)  # C:\Users\Administrator\Desktop\测试\视频
    # 移动文件
    shutil.move(old_path, new_path)

# 待处理的文件路径
base_path = r"C:\Users\Administrator\Desktop\测试"
# 准备存放文件的文件夹
list1= ['视频','Excel',]
for name in list1:
    # 路径拼接
    path = os.path.join(base_path,name)
    # 文件夹创建
    if not os.path.exists(path):
        os.mkdir(path)
    else:
        print('文件夹已存在')

# 处理文件
# 获取当前路径下的所有文件
file_list = os.listdir(base_path)
# 循环所有文件
for filename in file_list:
    # 过滤不需要的文件夹,不要文件夹的文件
    if filename not in list1:
        src_type = filename.split('.')[-1]
        if src_type == "mp4":
            move_file('视频')
        elif src_type == "xlsx" or src_type == "xls":
            move_file('Excel')
        else:
            pass

6、os.scandir获取文件名、文件路径、判断是否文件夹

import os

for file in os.scandir(r"D:\demo"):
    print(file.name, file.path, file.is_dir())  # os.is_dir()是文件夹
    if file.is_dir():
        pass
    else:
        print(file.name)

7、glob层级搜索

glob.glob

import glob
path = r"D:\demo\层级"
# 同层级搜索
for file in glob.glob(path + "/*"):
    print(file)

# 多层级搜索
for file in glob.glob(path + "/**",recursive=True):
    print(file)

8、获取指定路径

os.path.expanduser

os.path.join(os.path.expanduser("~"),"Desktop")  # 获取桌面路径

os.path.join(os.path.expanduser("~"),"Desktop/text")  # 获取桌面text文件夹路径

os.path.join(os.path.expanduser("~"),"Desktop/demo.xlsx")   # 获取桌面demo.xlsx路径

9、open操作文件

f = open(r"C:\Users\HP\Desktop\新建 文本文档.txt","r",encoding="utf-8") # 读取文件
f.close() #关闭文件

# encoding非必填项,utf-8或者gbk等
打开模式描述
' r '只读模式,如果文件不存在,返回异常FileNotFoundError,默认值
'w'覆盖写模式,文件不存在则创建,存在则完全覆盖原文件。str,not int
'x'创建写模式,文件不存在则创建,存在则返回异常FileExistsError
'a'追加写模式,文件不存在则创建,存在则原文件最后追加内容
' b '二进制文件模式
' t '文本文件模式,默认值
'+'与r / w/ x/ a一同使用,在原功能基础上增加同时读写功能

 二进制文件通常包含原始字节,没有特定的编码格式

图片文件、视频文件、声音文件等非结构文件通常以二进制形式存储,需要特定解码器程序才能正确打开

文件操作-常用组合

  • 以文本方式只读打开一个文件,读入后不能对文件进行修改:r
  • 以文本方式可读写地打开一个文件,可以读入并修改文件:r+
  • 以文本方式打开一个空文件,准备写入一批内容,并保存为新文件:w
  • 以文本方式打开一个空文件或已有文件,追加形式写入一批内容,更新原文件:a+
  • 以二进制方式只读打开一个文件,读入后不能对文件进行修改:rb

文件操作-读

方法描述
f.read(size)从文件中读入整个文件内容。参数可选,如果给出,读入前size长度的字符串或字节流
f.readline(size)从文件中读入一行内容。参数可选,如果给出,读入该行前size长度的字符串或字节流
f.readlines(hint)从文件中读入所有行,以每行为元素形成一个列表。参数可选,如果给出,读入hint行
f.seek(offset)改变当前文件操作指针的位置,offset的值:0为文件开头;1为从当前位置开始;2为文件结尾

 读取中文文本

f = open("test.txt","rt",encoding = "UTF-8") # 中文UTF-8,相对路径
s = f.read()  # 返回字符串,整个文件的内容
f.close()

读取用python写入的文件,在打开时是无需用解码器encoding。

读取段落

file = r"C:\Users\HP\Desktop\新建 文本文档.txt"
d = open(file,"rt",encoding="UTF-8")
s=d.readline()
print(s)  # 返回段落一,此刻光标在段落一结尾,结尾处有换行\n
s=d.readline()
print(s)  # 返回段落二,
d.close()
file = r"C:\Users\HP\Desktop\新建 文本文档.txt"
d = open(file,"rt",encoding="UTF-8")
s=d.readlines()  # ['啊沙发上aaaa\n', '撒打发bbbb']
print(s)
d.close()

read 和readlines 同时读取

d = open(file,"r",encoding="UTF-8")
s=d.read()
print(s)
l=d.readlines()
print(l)  # 返回空列表,因为光标在结尾了
d.close()

# 修改光标/指针位置
d = open(file,"r",encoding="UTF-8")
s=d.read()
print(s)
d.seek(0) # 指针在文件开头
l=d.readlines()
print(l)
d.close()

练习1:把列表写入文件中

# 把列表写入文件中
ls =["北京","上海","深圳","广州"]
f=open(r"C:\Users\HP\Desktop\city.csv","w")  # w只能写入str
f.write(",".join(ls))  
f.close()

练习2:读取文件输出列表

# 文件:北京,上海,深圳,广州
f=open(r"C:\Users\HP\Desktop\city.csv","r")
s = f.read()
f.close()
print(s.split(","))  # ['北京', '上海', '深圳', '广州']

文件的操作-写

方法描述
f.write(s)向文件写入一个字符串或字节流
f.writelines(lines)将一个元素为字符串的列表整体写入文件

 write方法:新建文件并写入两行

file = r"C:\Users\HP\Desktop\new.txt"
d =open(file,"w")
d.write("aaaa\n")  #不能写入空白否则报错
d.write("bbbb\n") 
d.close()

writelines方法:列表形式写入,覆盖原文件

file = r"C:\Users\HP\Desktop\new.txt"
d =open(file,"w")
d.writelines(["aaaa","bbbb"]) # 写入 aaaabbbb
d.close()

a 打开模式:追加

file = r"C:\Users\HP\Desktop\new.txt"
d =open(file,"a")
d.writelines(["ccc\n","ddd\n"])
d.close()

python创建的文件无需encoding解码

相对路径/绝对路径

相对路径:同个目录下,可省略路径只保留文件名

绝对路径:路径+文件名

 open案例:词频统计

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值