OS Python

2020-04-26  本文已影响0人  RayRaymond

路径

输出运行路径 os.getcwd()

import os

print(os.getcwd())
E:\Myjupyter\老妈工作

Windows 用反斜杠 \

Mac 和 Linux 用斜杠 /

反斜杠在Python中表示转义符 所以可以用 \\

路径连接 os.path.join( ... , ...)

print(os.path.join('A','AI'))
A\AI

绝对路径,相对路径

输出当前程序文件夹下所有文件和文件夹 os.listdir()

print(os.listdir())
['.ipynb_checkpoints', 'OS.ipynb', 'output.ipynb', 'Untitled.ipynb', '运销公司读书会会员购书与进阶细则.xlsx']
things = os.listdir()
for thing in things:
    print('文件:',thing)
文件: .ipynb_checkpoints
文件: OS.ipynb
文件: output.ipynb
文件: Untitled.ipynb
文件: 运销公司读书会会员购书与进阶细则.xlsx
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
# 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']
发现子文件夹:[]

搜索, 匹配文件名称

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')

Reference

[1] https://www.bilibili.com/video/BV197411f7Rp?p=4

上一篇 下一篇

猜你喜欢

热点阅读