- os
[operating system]
[Python 标准库]
路径
输出运行路径 os.getcwd()
import os
print(os.getcwd())
E:\Myjupyter\老妈工作
- 路径
Windows 用反斜杠 \
Mac 和 Linux 用斜杠 /
反斜杠在Python中表示转义符 所以可以用 \\
路径连接 os.path.join( ... , ...)
print(os.path.join('A','AI'))
A\AI
绝对路径,相对路径
- 绝对路径: 根文件夹开始
- E:\Myjupyter\老妈工作
- 相对路径: 相对于程序运行的路径
- .\ ...
输出当前程序文件夹下所有文件和文件夹 os.listdir()
print(os.listdir())
['.ipynb_checkpoints', 'OS.ipynb', 'output.ipynb', 'Untitled.ipynb', '运销公司读书会会员购书与进阶细则.xlsx']
- 输出结果为列表 list
things = os.listdir()
for thing in things:
print('文件:',thing)
文件: .ipynb_checkpoints
文件: OS.ipynb
文件: output.ipynb
文件: Untitled.ipynb
文件: 运销公司读书会会员购书与进阶细则.xlsx
- 判断是文件还是文件夹 os.path.isdir()
things = os.listdir()
for thing in things:
print(thing, '是文件夹吗:',os.path.isdir(thing))
.ipynb_checkpoints 是文件夹吗: True
OS.ipynb 是文件夹吗: False
output.ipynb 是文件夹吗: False
Untitled.ipynb 是文件夹吗: False
运销公司读书会会员购书与进阶细则.xlsx 是文件夹吗: False
os.scandir() 迭代器
for file in os.scandir():
print(file.name, file.path, file.is_dir())
.ipynb_checkpoints .\.ipynb_checkpoints True
OS.ipynb .\OS.ipynb False
output.ipynb .\output.ipynb False
Untitled.ipynb .\Untitled.ipynb False
运销公司读书会会员购书与进阶细则.xlsx .\运销公司读书会会员购书与进阶细则.xlsx False
-
name: 条目的文件名,相对于 scandir path 参数( 对应于 os.listdir的返回值)
-
path: 输入路径 NAME ( 不一定是绝对路径) --与 os.path.join(scandir_path, entry.name)
-
is_dir(*, follow_symlinks=True): 类似于 pathlib.Path.is_dir(),但返回值在 DirEntry 对象上是缓存;大多数情况下不需要系统调用;如果 follow_symlinks 是 false,则不要跟随符号链接。
-
is_file(*, follow_symlinks=True): 类似于 pathlib.Path.is_file(),但返回值在 DirEntry 对象上是缓存;大多数情况下不需要系统调用;如果 follow_symlinks 是 false,则不要跟随符号链接。
-
is_symlink(): 类似 pathlib.Path.is_symlink(),但返回值缓存在 DirEntry 对象上;大多数情况下不需要系统调用
-
stat(*, follow_symlinks=True): 类似 os.stat(),但返回值缓存在 DirEntry 对象上;不需要对 Windows (。除了符号符号外) 进行系统调用;如果 follow_symlinks 是 false,则不跟随符号链接( 像 os.lstat() )。
-
inode(): 返回项的节点数;返回值在 DirEntry 对象上缓存
# import os
# import shutil
# data_path='E:\\Myjupyter\\老妈工作'
# target_path='E:\\Myjupyter\\老妈工作'
# with os.scandir(data_path) as it:
# for entry in it:
# if not entry.name.startswith('.') and entry.is_file():
# file_name=entry.name
# pair='__'.join(file_name.split('__')[:2])
# shutil.move(data_path+file_name,target_path+pair+'\\'+file_name)
# print(file_name)
查询文件信息 os.scandir() --> file.stat()
for file in os.scandir():
print(file.name,':')
print(file.stat())
print('size:',file.stat().st_size/1024/1024,' M')
print('\n')
.ipynb_checkpoints :
os.stat_result(st_mode=16895, st_ino=0, st_dev=0, st_nlink=0, st_uid=0, st_gid=0, st_size=0, st_atime=1587289961, st_mtime=1587289961, st_ctime=1586514070)
size: 0.0 M
OS.ipynb :
os.stat_result(st_mode=33206, st_ino=0, st_dev=0, st_nlink=0, st_uid=0, st_gid=0, st_size=15918, st_atime=1587306515, st_mtime=1587306515, st_ctime=1587289953)
size: 0.015180587768554688 M
output.ipynb :
os.stat_result(st_mode=33206, st_ino=0, st_dev=0, st_nlink=0, st_uid=0, st_gid=0, st_size=16076, st_atime=1586707224, st_mtime=1586707224, st_ctime=1586514069)
size: 0.015331268310546875 M
test_data :
os.stat_result(st_mode=16895, st_ino=0, st_dev=0, st_nlink=0, st_uid=0, st_gid=0, st_size=0, st_atime=1587304347, st_mtime=1587304347, st_ctime=1587304268)
size: 0.0 M
Untitled.ipynb :
os.stat_result(st_mode=33206, st_ino=0, st_dev=0, st_nlink=0, st_uid=0, st_gid=0, st_size=4683, st_atime=1586707223, st_mtime=1586707223, st_ctime=1586693683)
size: 0.004466056823730469 M
运销公司读书会会员购书与进阶细则.xlsx :
os.stat_result(st_mode=33206, st_ino=0, st_dev=0, st_nlink=0, st_uid=0, st_gid=0, st_size=51807, st_atime=1586692865, st_mtime=1586692865, st_ctime=1586692865)
size: 0.049407005310058594 M
- 创建时间
import time
# Unix 时间戳,可以用time.ctime转换
for file in os.scandir():
print(file.name,':')
print('创建时间',time.ctime(file.stat().st_atime))
print('\n')
.ipynb_checkpoints :
创建时间 Sun Apr 19 17:52:41 2020
OS.ipynb :
创建时间 Sun Apr 19 22:28:35 2020
output.ipynb :
创建时间 Mon Apr 13 00:00:24 2020
test_data :
创建时间 Sun Apr 19 21:52:27 2020
Untitled.ipynb :
创建时间 Mon Apr 13 00:00:23 2020
运销公司读书会会员购书与进阶细则.xlsx :
创建时间 Sun Apr 12 20:01:05 2020
import datetime
tim = datetime.datetime.fromtimestamp(1586692865)
print(tim)
print(tim.year,tim.month,tim.day,tim.hour)
2020-04-12 20:01:05
2020 4 12 20
遍历文件夹 os.walk()
import os
for dirpath, dirname, file in os.walk('./'):
print(f'文件相对路径:{dirpath}')
print(f'发现文件:{file}')
print(f'发现子文件夹:{dirname}\n')
文件相对路径:./
发现文件:['OS.ipynb', 'output.ipynb', 'Untitled.ipynb', '运销公司读书会会员购书与进阶细则.xlsx']
发现子文件夹:['.ipynb_checkpoints', 'test_data']
文件相对路径:./.ipynb_checkpoints
发现文件:['OS-checkpoint.ipynb', 'output-checkpoint.ipynb', 'Untitled-checkpoint.ipynb']
发现子文件夹:[]
文件相对路径:./test_data
发现文件:['test1.ipynb', 'test2.ipynb', 'test3.ipynb']
发现子文件夹:['.ipynb_checkpoints']
文件相对路径:./test_data\.ipynb_checkpoints
发现文件:['test1-checkpoint.ipynb', 'test2-checkpoint.ipynb', 'test3-checkpoint.ipynb']
发现子文件夹:[]
-
dirpath
: 文件相对路径 -
dirname
: 子文件夹列表 -
file
:dirpath
下的文件列表
搜索, 匹配文件名称
str.startswith('...') 开头 str.endswith('...') 结尾
print('abc'.startswith('ab'))
print('abc'.endswith('c'))
True
True
glob.glob()
*
匹配任意字符
?
匹配单字符
[seq]
匹配 seq
中的任何字符
[!seq]
匹配不在 seq
中的任何字符
import glob
print(glob.glob('*'))
print(glob.glob('*.ipynb'))
print(glob.glob('??.ipynb'))
print(glob.glob("test[1-7].ipynb"))
print(glob.glob("test[1,3,5,7].ipynb"))
print(glob.glob("o*t.ipynb"))
['OS.ipynb', 'output.ipynb', 'test_data', 'Untitled.ipynb', '运销公司读书会会员购书与进阶细则.xlsx']
['OS.ipynb', 'output.ipynb', 'Untitled.ipynb']
['OS.ipynb']
[]
[]
['output.ipynb']
**/*
匹配任意层级文件夹中的文件 recursive = True
会不断进内部文件夹
print(glob.glob('**/*.ipynb',recursive = True))
print(glob.glob('**/tes*.ipynb',recursive = True))
print(glob.glob('**/test[1-3].ipynb',recursive = True))
print(glob.glob('**/test[1,3].ipynb',recursive = True))
print(glob.glob('**/test[!1,3].ipynb',recursive = True))
['OS.ipynb', 'output.ipynb', 'Untitled.ipynb', 'test_data\\test1.ipynb', 'test_data\\test2.ipynb', 'test_data\\test3.ipynb']
['test_data\\test1.ipynb', 'test_data\\test2.ipynb', 'test_data\\test3.ipynb']
['test_data\\test1.ipynb', 'test_data\\test2.ipynb', 'test_data\\test3.ipynb']
['test_data\\test1.ipynb', 'test_data\\test3.ipynb']
['test_data\\test2.ipynb']
fnmatch
import fnmatch
print(fnmatch.fnmatch('le.py','l*.py'))
True
文件和文件夹
读取
with open(..., 'r') as ...:
with open('testfile.txt','r',encoding='utf-8') as f:
text = f.readlines()
print(text)
['第一行\n', '第二行\n', 'test']
写入
with open(..., 'w') as ...:
with open('testfile_w.txt','w',encoding='utf-8') as f:
text = 'line1\nline2\n'
f.write(text)
f.write('line3')
with open(..., 'w') as ...:
- 文件名不存在会直接创建, 文件已存在会被清空
with open(..., 'r') as ...:
- 文件名不存在会直接创建, 文件已存在会继续写入
临时文件和文件夹 tempfile
from tempfile import TemporaryFile
# w+ 写入和读取
with TemporaryFile('w+') as f:
f.write('hello world')
f.seek(0) # 0 回到文件开头!!!!
data = f.readlines()
print(data)
# 程序运行完自动删除临时文件
['hello world']
from tempfile import TemporaryDirectory
# w+ 写入和读取
with TemporaryDirectory() as tmp_folder:
print(f'temporary folder:{tmp_folder}')
# 程序运行完自动删除临时文件夹
temporary folder:C:\Users\73735\AppData\Local\Temp\tmp8zt1ddw2
创建文件夹
import os
os.mkdir('test_dir')
检测文件夹存在 os.path.exists
if not os.path.exists('test_dir'):
os.mkdir('test_dir')
多层文件夹 os.makedirs
os.makedirs('test_dir/test_dir1/test_dir2')
复制,移动,重命名
shutil.copy 复制文件,重命名
import shutil
# copy
shutil.copy('testfile.txt','./test_dir')
# copy & rename
shutil.copy('testfile.txt','./test_dir/testfile_1.txt')
'./test_dir/testfile_1.txt'
shutil.copytree 复制文件夹
# copy dir
shutil.copytree('test_dir','copy_testdir')
'copy_testdir'
shutil.move 移动文件,文件夹
import shutil
shutil.copy('testfile.txt','testfile1.txt')
shutil.copy('testfile.txt','testfile2.txt')
shutil.copy('testfile.txt','testfile3.txt')
shutil.move('testfile1.txt','test_dir\movefile.txt')
'test_dir\\movefile.txt'
import os
print(os.listdir())
['.ipynb_checkpoints', 'copy_testdir', 'OS.ipynb', 'output.ipynb', 'testfile.txt', 'testfile2.txt', 'testfile3.txt', 'test_data', 'test_dir', 'Untitled.ipynb', '运销公司读书会会员购书与进阶细则.xlsx']
os.rename 重命名文件
import os
os.rename('testfile2.txt', 'new.txt')
删除文件
删除文件 os.remove
import os
os.remove('new.txt')
删除文件夹 shutil.rmtree()
import shutil
if not os.path.exists('del_dir'):
os.mkdir('del_dir')
shutil.rmtree('del_dir')
网友评论