import os
一、常用方法
1、输出文件时间
返回最近文件修改时间:os.path.getmtime(path) 返回文件创建时间:os.path.getctime(path)
import os
import time
"""输出文件时间"""
print ( os. path. getmtime( r'D:/Software/Anaconda/Lib/site-packages/pyspider/__init__.py' ) )
>> >> > 1564387608.5626507
print ( time. strftime( "%Y-%m-%d %H:%M:%S" , time. localtime( 1564387608.5626507 ) ) )
>> >> > '2019-07-29 16:06:48'
print ( os. path. getctime( r'D:/Software/Anaconda/Lib/site-packages/pyspider/__init__.py' ) )
2、返回一个文件路径字符串
会返回一个文件路径字符串:os.path.join()
"""os.path.join()会返回一个文件路径字符串"""
print ( os. path. join( 'user' , 'bin' , 'spam' ) )
>> >> > user\bin \spam
myFiles = [ 'accounts.txt' , 'details.csv' , 'invite.docx' ]
for filename in myFiles:
print ( os. path. join( 'E:\\' , filename) )
>> >> > E: \accounts. txt
>> >> > E: \details. csv
>> >> > E: \invite. docx
3、获取当前路径、切换路径
取得当前路径字符串:os.getcwd() 切换路径:os.chdir(path)
"""os.getcwd()取得当前路径字符串,并且可以利用os.chdir()改变它"""
print ( os. getcwd( ) )
>> >> > E: \project
os. chdir( 'D:\\' )
print ( os. getcwd( ) )
>> >> > D: \
os. chdir( 'E:\\project' )
print ( os. getcwd( ) )
>> >> > E: \project
4、获取绝对路径、相对路径
绝对路径:os.path.abspath(’.’) ,总是从根文件夹开始 判断是否为绝对路径:os.path.isabs(path),相对于程序的当前目录 返回path1到path2的相对路径:os.path.relpath(path1, path2)
"""处理绝对路径和相对路径"""
print ( os. path. abspath( '.' ) )
>> >> > E: \project
print ( os. path. isabs( 'E:\\project' ) )
>> >> > True
print ( os. path. relpath( 'E:\\project' , 'E:\\python' ) )
>> >> > . . \project
5、文件名、目录相关处理
返回path最后的文件名:os.path.basename(path) 分离文件名和扩展名: os.path.splitext(file_name) 返回一个路径的目录名称:os.path.dirname(path) 同时返回一个目录的目录名称和基本名称:os.path.split(path) 返回每个文件夹字符串的列表:os.path.split(os.path.sep)
path = 'E:\\project\\practice\\ip.txt'
print ( os. path. basename( path) )
>> >> > ip. txt
print ( os. path. splitext( "ip.txt" ) )
>> >> > ( 'ip' , '.txt' )
print ( os. path. dirname( path) )
>> >> > E: \project\practice
print ( os. path. split( path) )
>> >> > ( 'E:\\project\\practice' , 'ip.txt' )
print ( os. path. split( os. path. sep) )
>> >> > [ 'E:' , 'project' , 'practice' , 'ip.txt' ]
6、查看文件大小、文件内容
返回path参数中文件的字节数:os.path.getsize(path) 返回文件名字符串的列表,包含path参数中的每个文件:os.listdir(path)
"""查看文件大小和文件内容"""
print ( os. path. getsize( 'E:\\project\\practice\\ip.txt' ) )
>> >> > 417
```python
print ( os. listdir( 'E:\\project\\practice' ) )
>> >> > [ 'agents.py' , 'getxici_ip.py' , 'httpknow' , 'ip.txt' , 'linux' , 'pdc_csm_mutipr.py' , 'pdc_csm_thread.py' , 'process.py' , 'redisbasic.py' , 'thread.py' ]
totalsize = 0
for filename in os. listdir( 'E:\\project\\practice' ) :
totalsize = totalsize + os. path. getsize( os. path. join( 'E:\\project\\practice' , filename) )
print ( totalsize)
>> >> > 38661
7、检查文件、路径存在
检测文件或者文件夹是否存在:os.path.exists(path) 检测是否存在文件夹:os.path.isdir(path) 检测是否存在文件:os.path.isfile(path)
"""检查路径有效性"""
print ( os. path. exists( 'E:\\project\\practice' ) )
>> >> > True
print ( os. path. isdir( 'E:\\project\\practice' ) )
>> >> > True
print ( os. path. isfile( 'E:\\project\\practice\\ip.txt' ) )
>> >> > True
二、小练习
1、题目
python下遍历文件夹中所有文件以及子目录文件,对以.txt结尾的文件进行删除;
2、思路
(1) os.listdir(path)函数能得到文件夹下所有文件(包括文件夹)的名称;但是无法获取子文件夹的状态 ;因而这边要用到递归 (2)os.listdir(path)获取所传目录下的所有文件以及文件夹,会得到一个存放文件名字的列表; (3)遍历列表里的每个文件,对文件后缀名进行判断,if file[-4:] == ‘.txt’;如果其后缀是以.txt文件结尾,则删除该文件; (4)在遍历列表里的每个文件过程中,同时筛选出文件夹的文件,if ‘.’ not in file;进行函数自调重复(1)~(4)步骤;
Created with Raphaël 2.2.0
开始
os.listdir(path):获取当前路径下的文件及文件夹
是否是以.txt结尾的文件(if file[-4:] == '.txt')
删除该文件
是否是文件夹?(if '.' not in file)
yes
no
yes
3、涉及到的方法
os.listdir(path):得到文件夹下所有文件(包括文件夹)的名称;但是无法获取子文件夹的状态 os.path.join(path1[, path2[, …]]):把目录和文件名合成一个路径 os.remove(path):删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory os.rmdir(path) :删除path指定的空目录,如果目录非空,则抛出一个OSError异常
4、代码实现
(1)path路径根据你想改的目录进行修改
import os
def find_file ( path) :
dirs = os. listdir( path)
print ( '第 "{}\\" 目录下的文件:' . format ( path) , dirs, end= '\n' )
for file in dirs:
if file [ - 4 : ] == '.txt' :
delete_file = os. path. join( path, file )
print ( delete_file)
os. remove( delete_file)
elif '.' not in file :
find_file( os. path. join( path, file ) )
path = r"E:\1 - 副本"
find_file( path)
第 "E: \1 - 副本\" 目录下的文件: [ '1.py' , '1.spec' , 'b.ico' , 'build' , 'dist' , '新建文本文档4.txt' ]
第 "E: \1 - 副本\build\" 目录下的文件: [ '1' , '新建文本文档2.txt' ]
第 "E: \1 - 副本\build\1 \" 目录下的文件: [ '1.exe.manifest' , 'Analysis-00.toc' , 'base_library.zip' , 'EXE-00.toc' , 'PKG-00.pkg' , 'PKG-00.toc' , 'PYZ-00.pyz' , 'PYZ-00.toc' , 'xref-1.html' , '新建文本文档1.txt' ]
E: \1 - 副本\build\1 \新建文本文档1. txt
E: \1 - 副本\build\新建文本文档2. txt
第 "E: \1 - 副本\dist\" 目录下的文件: [ '1.exe' , '新建文本文档3.txt' ]
E: \1 - 副本\dist\新建文本文档3. txt
E: \1 - 副本\新建文本文档4. txt
第 "E: \1 - 副本\" 目录下的文件: [ '1.py' , '1.spec' , 'b.ico' , 'build' , 'dist' ]
第 "E: \1 - 副本\build\" 目录下的文件: [ '1' ]
第 "E: \1 - 副本\build\1 \" 目录下的文件: [ '1.exe.manifest' , 'Analysis-00.toc' , 'base_library.zip' , 'EXE-00.toc' , 'PKG-00.pkg' , 'PKG-00.toc' , 'PYZ-00.pyz' , 'PYZ-00.toc' , 'xref-1.html' ]
第 "E: \1 - 副本\dist\" 目录下的文件: [ '1.exe' ]