如何用python查询文件路劲

如何用python查询文件路劲,第1张

最近在用Python脚本处理文件夹下面的文件名的搜索和重命名。其中碰到如何递归遍历文件夹下面所有的文件,找到需要的文件,并且重命名的问题。其实如果看看Python的document,还是比较简单的,这里直接给出使用方法,免得大家还要花精力去查找。

环境:

文件夹结构:

----path1

----path1-1

----path1-1.1.txt

----path1-2

----path1.1.txt

----path2

----recursiveDir.py

文件夹结构如上所示。

代码分析(recursiveDir.py):

[python] view plaincopy

<span style="font-size:18px">import os

'''''

本脚本用来演示如何遍历py脚本所在文件夹下面所有的文件(包括子文件夹以及其中包含的文件)。

重点演示如何获取每个文件的绝对路径。注意os.path.join(dirpath, filename)的用法。

'''

rootdir = os.getcwd()

print('rootdir = ' + rootdir)

for (dirpath, dirnames, filenames) in os.walk(rootdir):

#print('dirpath = ' + dirpath)

for dirname in dirnames:

print('dirname = ' + dirname)

for filename in filenames:

#下面的打印瞎察游结果类似为:D:\pythonDirDemo\path1\path1-1\path1-1.1.txt

print(os.path.join(dirpath, filename))

if(filename=='path1-1.1.txt'):

os.chdir(dirpath)

#os.rename(os.path.join(dirpath, filename), dirpath + os.sep + 'path1-1.1.new.txt')

os.rename('path1-1.1.txt', 'path1-1.1.new.txt')

#os.remove(os.path.join(dirpath, filename))

#下面的输出为fileName = path1-1.1.txt,并未包含绝对路径,所以需要使用os.path.join来链接,获取绝对路径

print('fileName = ' + filename)

print('------------------one circle end-------------------')</span>

所以可以看到程序中使用os.path.join(dirpath, filename)来拼接出绝对路径出磨销来。注意下面的重命名用法,可以将工作目录切换到os.chdir(dirpath),这样就可以直接用没并os.rename(oldfile, newfile).Python会自动到dirpath下面查找oldfile并且重命名为newfile。注意工作目录的含义:在Python的GUI中,使用os.getcwd()可以获取到当前工作目录。测试如下:

[html] view plaincopy

<span style="font-size:18px">>>>os.chdir('D:')

>>>os.getcwd()

'D:\\pythonDirDemo\\path1\\path1-1'

>>>os.chdir('D:\\')

>>>os.getcwd()

'D:\\'</span>

可见却是可以用chdir改变工作目录。这个代码只是在重命名的时候用到的小技巧而已,大家知道有这个东西就行了,不过调用chdir之后,后续再获取getcwd()就会被影响,所以警惕。

正文

通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错。所以最好在做任何 *** 作之前,先判断文件是否存在。

这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块、Try语句、pathlib模块。

回到顶部

1.使用os模块

os模块中的os.path.exists()方法用于检验文件是否存在。

判断文件是否存在旦陪

import os

os.path.exists(test_file.txt)#Trueos.path.exists(no_exist_file.txt)#False

判断文件夹是否存在

import os

os.path.exists(test_dir)#Trueos.path.exists(no_exist_dir)#False

可以看出用os.path.exists()方法,判断文件和文件夹是一样。

其实这种方法还是有个问题,假设你想检查文件“test_data”是否存在,但是当前路径下有个叫“test_data”的文件夹,这样就可能出现误判。为了避免这样的情况,可以这样:

只检查文件

import os

os.path.isfile("test-data")

通过这个方法,如果文件”test-data”不存在将返回False,反之返回True。

即是文件存在,你可能还需要判断文丛戚件是否可进行读写 *** 作。

回到顶部

判断文件是否可做读写 *** 作

使用os.access()方法判断文件是否可进行读写 *** 作。

语法:

os.access(path, mode)

path为文件路径,mode为 *** 作模式,有这么几种:

os.F_OK: 检查文件是否存在

os.R_OK: 检查文件是否可读

os.W_OK: 检查文件是否可以写入

os.X_OK: 检查文件是否可以执行

该方法通过判断文件路径是否存在和各种访问模式的权限返回True或者False。

import osif os.access("/file/path/foo.txt", os.F_OK):    print "Given file path is exist."if os.access("/file/path/foo.txt", os.R_OK):    print "File is accessible to read"if os.access("/file/path/foo.txt", os.W_OK):    print "File is accessible to write"if os.access("/file/path/foo.txt", os.X_OK):    print "File is accessible to execute"

回到顶部

2.使用Try语模郑蠢句

可以在程序中直接使用open()方法来检查文件是否存在和可读写。

语法:

open()

如果你open的文件不存在,程序会抛出错误,使用try语句来捕获这个错误。

程序无法访问文件,可能有很多原因:

如果你open的文件不存在,将抛出一个FileNotFoundError的异常

文件存在,但是没有权限访问,会抛出一个PersmissionError的异常。

所以可以使用下面的代码来判断文件是否存在:

try:

   f =open()

   f.close()except FileNotFoundError:    print "File is not found."except PersmissionError:    print "You don't have permission to access this file."

其实没有必要去这么细致的处理每个异常,上面的这两个异常都是IOError的子类。所以可以将程序简化一下:

try:

   f =open()

   f.close()except IOError:    print "File is not accessible."

使用try语句进行判断,处理所有异常非常简单和优雅的。而且相比其他不需要引入其他外部模块。

回到顶部

3. 使用pathlib模块

pathlib模块在Python3版本中是内建模块,但是在Python2中是需要单独安装三方模块。

使用pathlib需要先使用文件路径来创建path对象。此路径可以是文件名或目录路径。

检查路径是否存在

path = pathlib.Path("path/file")

path.exist()

检查路径是否是文件

path = pathlib.Path("path/file")

path.is_file()

一、os.getcwd()

获取当前工作目录,即当前Python脚本工作的目录路径。

二、os. chdir(path)

改变当前脚本工作目录;相当于shell下的cd命令。

三、os.pardir

返回当前目录的父目录('..')

四、获取当前使用的 *** 作系统类型(其中 ‘nt’ 是 windows,’posix’ 是linux 或者 unix)。

五、os.mkdir(path [, mode=0777])

生成单级目录;相当于linux中的mkdir dirname。参数mode表示生成的目录的权限,默认是超级权限,也就是0777。如果重复创建,会报错

六、os.makedirs(path [, mode=0777])

可生成多层递归目录,父目录如果不存在,递归生成。参数mode表示生成的目录的权限,默认是超级权限,也就是0777。

七、os.removedirs(path)

若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依次类推。

八、os.rmdir(path)

删除单级空目录,若目录不为空则无法删除,会报错;相当Linux中的rmdir dirname。

九、os.listdir(path)

列出指定目录下的所有文件和子目录,包括隐藏文件或目录,并以列表形式返回。

十、os.remove(filePath)

删除一个指定的文棚码件,参数filePath表示文件所在的路径。

注意:该方法只能删除文件,不能删除目录。

十一、os.rename(oldname, newname)

重命名文件/目录。

十二、os.access(path, mode)

输出文件权限模式。

十三、os.chmod(path, mode)

修改文件的权限。

十四、os.walk(top, topdown=True, onerror=None, followlinks=False)

➢top:表示需要遍历的目录树的路径。

➢topdown的默认值是“True”,表示首先返回目录树下的文件,然后遍历目录树下的子目录。值设为False时,则表示先遍历目录树下的子目录,返回子目录下的文件,最后返回根目录下的文件。

➢onerror的默认值是链简哪“None”,表示忽略文件遍历时产生的错误。如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历。

➢该函数返回咐行一个列表,列表中的每一个元素都是一个元组,该元组有3个元素,分别表示每次遍历的路径名,目录列表和文件列表。

➢默认情况下,os.walk 不会遍历软链接指向的子目录,若有需要请将followlinks设定为true

十五、os.path.split(path)

将path分割成目录和文件名(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在),并存于元组中返回。

十六、os.path.exists(path)

判断path是否存在,如果存在返回True,否则返回False。

十七、os.path.isfile(path)

判断path是否是文件,如果是返回True,否则返回False。

十八、os.path.isdir(path)

判断path是否是目录,如果是目录返回True,否则返回False。

十九、os.path.getsize(name)

获得文件大小,如果name是目录返回结果是0L或者4096L;如果name代表的目录或文件不存在,则会报WindowsError异常。

二十、os.path.join(a, *p)

连接两个或更多的路径名,中间以“\”分隔,如果所给的参数中都是绝对路径名,那先给的绝对路径将会被丢弃。

二十一、os.path.getatime(filename)

返回文件的最后访问时间,返回的是时间戳。

二十二、os.path.getctime(filename)

以时间戳的形式返回文件或目录的创建时间,在Unix系统上是文件最近更改的时间,在Windows上是文件或目录的创建时间。

1.基础题:

    检验给出的路径是否是一个文件:os.path.isfile("D:\\test.txt")

    检验给出的路径是否是一个目录:os.path.isdir("D:\\test.txt")

    判断是否是绝对路径:os.path.isabs("D:\\test.txt")

    检验给出的路径是否真地存在:

2.返回一个路径的目录名和文件名 :os.listdir("D:\\")

3.分离文件名与扩展名 :os.path.splitext("D:\\test.txt")

4.找出某个目录下所有的文件,并在每个文件中写入“gloryroad” :

>>>for files in os.walk("D:\\test"):

...    print(files)

...

('D:\\test', [], ['a.txt', 'b.txt', 'test.txt', 'test1.txt'])

>>>with open("D:\\test\\a.txt","w+") as f:

...    f.write("gloryroad")

5.如果某个目录下文件名包含txt后缀名,则把文件后面追加写一行“被我找到了!”

6. 命题练习:

    1) 一个目录下只有文件(自己构造),拷贝几个文件(手工完成)

    2 )用listdir函数获取所有文件,如果文件的创建时间是今天,那么就在文件里面写上文件的路径、文件名和文件扩展名

    3) 如果不是今天创建(获取文件的创建时间,并转化为时间格式,判断是否今天),请删除

    4 )计算一下这个程序的执行耗时

7.删除某个目录下的全部文件

8.统计某个目录下文件数和目录个数

9.使用程序建立一个多级的目录,在每个目录下,新建一个和目录名字一样的txt文件

10. 查找某个目录下是否存在某个文件名

11. 用系统命令拷贝文件

12.输入源文件所在路径和目标目录路径,然后实现文件拷贝功能

13.遍历某个目录下的所有图片,并在图片名称后面增加

14、遍历指定目录下的所有文件,找出其中占用空间最大的前3个文件

15、过滤py源码中的#注释,另存为文件result.py,并执行result.py,断言是否执行成功

16、文件访问,提示输入数字 N 和文件 F, 然后显示文件 F 的前 N 行.

17、从命令行接受1个路径如:c:\a\b\c\1.py, 实现1个函数创建目录a\b\c,创建文件1.py,实现1个函数删除已创建的目录及文件

18、有一个ip.txt,里面每行是一个ip,实现一个函数,ping 每个ip的结果,把结果记录存到ping.txt中,格式为ip:0或ip:1 ,0代表ping成功,1代表ping失败

19、实现DOS命令执行功能,接受输入命令并执行,然后把执行结果和返回码打印到屏幕

20、文件访问

    访问一存在多行的文件,实现每隔一秒逐行显示文本内容的程序,每次显示文本文件的 5行, 暂停并向用户提示“输入任意字符继续”,按回车键后继续执行,直到文件末尾。

    显示文件的格式为:[当前时间] 一行内容,比如:[2016-07-08 22:21:51] 999370this is test


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12252258.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存