Python的os和sys模块的实例应用场景(待续)

转换工作目录

有些必须要在当前工作目录下执行,而我们的脚本位置却不在当前目录

import os
import sys
path=r"D:xxxx"
# 列出该文件夹里的所有文件,这里获取的是一个列表啊
fileList = os.listdir(path) 
currentpath = os.getcwd()
# 这个改工作目录好厉害啊,工作目录不同会怎样,在python中
os.chdir(path) 
# 这里可对当前的想要执行的目录执行该
def demo():
  pass
# 改工作目录
os.chdir(currentpath)
# 刷新
sys.stdin.flush()

合成md文件

数据处理若是放在列表中,把多个字符串格式的元素存放在列表中,写入使用writelines

import os
import sys

path=r"D:\\xxx"
fileList = os.listdir(path) # 列出该文件夹里的所有文件,这里获取的是一个列表啊
currentpath = os.getcwd()
# 更改工作目录
os.chdir(path) 
contents = []
for md in fileList:
    # print(md)
    with open(md, 'r', encoding='utf-8') as f:
        # 文件较大,按行读(只有内存不够时候才用)
        contents.append(f.read()) # read()把文章一次性读入
# with open("result.md", "a+", encoding='utf-8') as f:
#     f.writelines(contents)
with open("result.md", 'w',encoding='utf-8') as f:
    f.writelines(contents)
os.chdir(currentpath)
# 刷新
sys.stdin.flush()

递归出指定目录下地所有子文件夹/子文件

返回可指定带路径的文件,和不带路径的文件
cur_path 和file

import os
def show_files(path, all_files):
    # 首先遍历当前目录所有文件,listdir只有文件
    file_list = os.listdir(path)
    # 准备循环判断每个元素是否是文件夹还是文件,是文件的话,把名称传入list,是文件夹的话,递归
    for file in file_list:
        # 利用os.path.join()方法取得路径全名,并存入cur_path变量,否则每次只能遍历一层目录
        cur_path = os.path.join(path, file)
        # 判断是否是文件夹
        if os.path.isdir(cur_path):
            show_files(cur_path, all_files)
        else:
            # 返回所有子文件路径并加到列表中
            # 若想输出的是带路径的文件,传入的则是cur_path 
            # 若想直接输出文件名则,传入的是file 
            all_files.append(cur_path)

    return all_files

复制文件到指定目录

新的文件需要指定目录才可以

import os
import shutil

oldname= r"D:\xxxx\result.md"
newname=r"D:\xxxx\Test\a.md"
shutil.copyfile(oldname,newname)

实际案例

提取某文件夹的所有.pdf文件,然后将其复制在指定的目录下

import os
import shutil

## 递归遍历出所有的子文件夹
def show_files(path, all_files=[]):
    # 首先遍历当前目录所有文件,listdir只有文件
    file_list = os.listdir(path)
    # 准备循环判断每个元素是否是文件夹还是文件,是文件的话,把名称传入list,是文件夹的话,递归
    for file in file_list:
        # 利用os.path.join()方法取得路径全名,并存入cur_path变量,否则每次只能遍历一层目录
        cur_path = os.path.join(path, file)
        # 判断是否是文件夹
        if os.path.isdir(cur_path):
            show_files(cur_path, all_files)
        else:
            # 返回所有子文件路径并加到列表中
            # 若想输出的是带路径的文件,传入的则是cur_path 
            # 若想直接输出文件名则,传入的是file 
            all_files.append(cur_path)

    return all_files
path = r"D:xxx"
all_files = show_files(path)
new_files = r"D:xxx
for i in all_files:
    # 提取指定后缀的文件
    if ".pdf" in i :
        a = os.path.split(i)
        a = a[-1]
        shutil.copyfile(i,new_files + '\{}'.format(a))

11/3更新

如何让一个python文件以任何方式启动,我们都可以读取已知文件的数据
os.path.dirname(os.path.realpath)
直接写绝对路径,但是给其他人就很不方便,那就用相对位置,相对于当前文件的位置。
这里可以用os,也可以用../来获取(表示当前文件所在的目录的上一级目录)
./代表当前目录

posted @ 2022-04-03 10:08  索匣  阅读(71)  评论(0编辑  收藏  举报