导航:首页 > 编程语言 > 遍历搜索python

遍历搜索python

发布时间:2022-10-01 16:23:12

1. python遍历目录就是这么简单

有时我们有列出目录下都有哪些文件和子目录的需求,这种情况是有现成命令可用的,比如windows下的dir命令,linux下的ls命令都可以,那我们用python代码怎么实现呢?

我们利用python丰富的库很容易就能实现一个简易版本,下面我们就用4种方法来实现它。

一、使用os.popen

os.popen工作原理是新建一个子进程,然后用这个子进程执行命令,父进程与子进程间通过管道进行通信。

根据调用popen时的传参,我们可以通过管道读取子进程的输出也可以向子进程写数据,默认是读取子进程的输出。

从以上描述可以看出popen是非常通用的,不是只能用于我们这个例子哦。

那我们开始用它实现我们的需求吧,代码如下:

哈哈,是不是很简单,这种方式虽然能达到目的但其实并不是我们想要的,我们本来就是要实现ls的,结果调用了ls,所以严格意义上来说我们并没有实现ls,那让我们继续往下看其它方法吧,嘿嘿。

二、使用glob.glob

glob可以根据你使用的通配符对文件进行匹配,利用这个特性我们可以列出当前目录下都有哪些文件和子目录,如下代码:

三、使用os.listdir

os.listdir同样可以列出某个目录下都有哪些文件和子目录,如下代码:

四、使用os.walk

os.walk在遍历目录方面非常强大,它不但可以遍历你需要的目录,也可以递归遍历子目录且递归的深度可以用代码控制,下面让我们分别看下怎么遍历整个目录树以及怎么控制深度吧。

os.walk默认是遍历整个目录树的,如下代码就会递归打印出当前目录下所有文件:

那我们怎么控制遍历的深度,比如只遍历n层呢?其实很简单,只需要定义一个深度变量,然后到达n后跳出循环即可,如下代码就只遍历1层:

至此我们已经写完4种方法了,如果你还有其他方法,欢迎评论交流。

2. python:遍历文件并搜索/读取

os.walk()

3. 如何利用Python遍历文件夹

1. 基本实现

[root@localhost ~]# cat dirfile.py

import os
path='/tmp'for dirpath,dirnames,filenames in os.walk(path): for file in filenames:
fullpath=os.path.join(dirpath,file) print fullpath

执行结果如下:

[root@localhost ~]# python dirfile.py
/tmp/yum.log/tmp/pulse-3QSA3BbwpQ49/pid/tmp/pulse-3QSA3BbwpQ49/native/tmp/.esd-0/socket

2. 在上例的基础上传递参数

import os,sys
path=sys.argv[1]for dirpath,dirnames,filenames in os.walk(path): for file in filenames:
fullpath=os.path.join(dirpath,file) print fullpath

执行方式为:[root@localhost ~]# python dirfile.py /tmp

在这里,sys.argv[1]是接受参数,也可以定义sys.argv[2]接受第二个参数

3. 如何用函数实现

PS:

1> def __init__():函数,也叫初始化函数。

self.path = path可以理解为初始化定义了1个变量。 在后面的def里面调用的时候必须要使用self.path而不能使用path

2>__name__ == '__main__'

模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这种情况下, __name__ 的值将是一个特别缺省"__main__"。上述类中加上__name__ == '__main__'的判断语句,可以直接在终端环境下执行python dirfile.py /tmp进行测试,不必非得在交互式环境下导入模块进行测试。

4. 如何用Python os.path.walk方法遍历搜索文件内容的操作详解

恭喜你,你的问题跟绝大多数不会问问题的人一样,让人觉得无从下手。我建议有些问题可以去stackoverflow上看看别人怎么问问题的,好的问问题的方式需要注意哪些。

5. python怎样遍历.py的内容

列表的遍历
方法一:通过for循环
li = [i for i in range(10)]
for i in li:
print(i)
方法二:通过while循环
# 虽然for循环已经很好用了,但是在有些情况下,使用while循环可以更灵活
# 只需要将判断条件设置为小于列表长度,即可完成列表通过while循环的遍历
li = [i for i in range(10)]
i = 0
while i < len(li):
print(li[i])
i += 1
方法三:配合enumerate使用,同时获取列表的索引
li = [i + 1 for i in range(10)]

# 此时,i为一个元组,元组的第一个元素为索引,第二个元素为原列表的元素
# 因此,在遍历列表的同时,需要同时获取坐标的情况下,可以配合enumerate()一起使用
for i in enumerate(li):
print(i)
字典的遍历
字典的遍历和列表有一些不同,因为字典有键和值两个关键部分。默认的遍历情况,是遍历字典的键,当然,可以通过字典的键取得值,也可以直接遍历值,或者直接遍历键和值。

方法一:直接使用for循环
直接使用for循环对一个字典进行遍历,默认取得的是字典的键

dt = {i: i + 1 for i in range(10)}

for i in dt:
print("字典的键:", i) # 字典的键
print("字典的值:", dt[i]) # 字典的值
方法二:遍历dict.keys()
这种方法与方法一的效果其实是一样的,同样是获取字典的键

dt = {i: i + 1 for i in range(10)}

for i in dt.keys():
print("字典的键:", i) # 字典的键
print("字典的值:", dt[i]) # 字典的值
方法三:遍历dict.values()
这种方法与方法一和二很不相同,因为它只获取了字典的值

dt = {i: i + 1 for i in range(10)}

# 这是很特殊的方法,因为它没有获取字典的键
for i in dt.values():
print("字典的值:", i) # 此时i不再是字典的键,而是值
方法四:遍历dict.items()
这种方法一般来说要更好,因为它同时获取到了字典的键和值,而且性能上要高于先获取键,再通过键获取对应的值

dt = {i: i + 1 for i in range(10)}

for i in dt.items():
print("字典的键值对:", i)
print("字典的键:", i[0])
print("字典的值:", i[1])
总结
1,列表的遍历比较简单,除了配合enumerate()使用,可以同步获取索引以外,并没有特别值得纠结的。

2,字典的遍历方法比较多,其中第四种是能适用于一切情况的,前两种也可以适用于一切情况,但是如果你同时需要获取键和值,性能不如第四种要好。第三种比较特别,除非你真的只需要字典的值,否则它在多数情况下是不能够满足需求的。

6. 如何用Python os.path.walk方法遍历搜索文件内容的操作详解

文中使用到了Python os模块和Python sys模块,这两个模块具体的使用方法请参考玩蛇网相关文章阅读。
Python os.path.walk方法遍历文件搜索内容方法代码如下:
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

import os, sys
#代码中需要用到的方法模块导入

listonly = False

skipexts = ['.gif', '.exe', '.pyc', '.o', '.a','.dll','.lib','.pdb','.mdb'] # ignore binary files

def visitfile(fname, searchKey):
global fcount, vcount
try:
if not listonly:
if os.path.splitext(fname)[1] in skipexts:
pass
elif open(fname).read().find(searchKey) != -1:
print'%s has %s' % (fname, searchKey)
fcount += 1
except: pass
vcount += 1

#www.iplaypy.com

def visitor(args, directoryName,filesInDirectory):
for fname in filesInDirectory:
fpath = os.path.join(directoryName, fname)
if not os.path.isdir(fpath):
visitfile(fpath,args)

def searcher(startdir, searchkey):
global fcount, vcount
fcount = vcount = 0
os.path.walk(startdir, visitor, searchkey)

if __name__ == '__main__':
root=raw_input("type root directory:")
key=raw_input("type key:")
searcher(root,key)
print 'Found in %d files, visited %d' % (fcount, vcount)

7. 如何用Python os.path.walk方法遍历搜索文件内容的操作详解

importos,sys
#代码中需要用到的方法模块导入


listonly=False

skipexts=['.gif','.exe','.pyc','.o','.a','.dll','.lib','.pdb','.mdb']#ignorebinaryfiles


defvisitfile(fname,searchKey):
globalfcount,vcount
try:
ifnotlistonly:
ifos.path.splitext(fname)[1]inskipexts:
pass
elifopen(fname).read().find(searchKey)!=-1:
print'%shas%s'%(fname,searchKey)
fcount+=1
except:pass
vcount+=1

#www.iplaypython.com

defvisitor(args,directoryName,filesInDirectory):
forfnameinfilesInDirectory:
fpath=os.path.join(directoryName,fname)
ifnotos.path.isdir(fpath):
visitfile(fpath,args)


defsearcher(startdir,searchkey):
globalfcount,vcount
fcount=vcount=0
os.path.walk(startdir,visitor,searchkey)


if__name__=='__main__':
root=raw_input("typerootdirectory:")
key=raw_input("typekey:")
searcher(root,key)
print'Foundin%dfiles,visited%d'%(fcount,vcount)

8. 如何用Python os.path.walk方法遍历搜索文件内容的操作详解

importos
forroot,dirs,filesinos.walk(os.getcwd()):
print(root,dirs,files)

找个文件夹,运行这段代码就知道怎么用了。

9. python中列表的遍历

没有优雅的方法解决,只有不要使用print语句,如楼上所说,或者使用python3.X中的print函数(通过

from __future__ import print_function使能print函数形式)

其实,在python2.X手册中对print语句描述说:(python2.7.2官方帮助文档)
一个空格会被自动打印在每个对象前,
除非:(1)还没有输出写到标准输出中
(2)当最后一个写到标准输出的是一个除了空格‘ ’的空白字符
(3)当最后写到标准输出的不是一个print语句。

所以在apple、banana等每个字符前都有一个空格。(apple的a前也有空格呢!)

一个好的解决办法是使用python3.X中的print函数。
通过在文件前面加上:
from __future__ import print_function
就可以使用print的函数形式了。
print函数的语法:
print([object, ...][, sep=' '][, end='\n'][, file=sys.stdout])
默认下,若没有指定sep,则使用空格。没指定end,则使用换行符。没指定输出文件则输出到标准输出。
例如:print('hello','world',sep='-',end='#')输出:
hello-world#
所以,你的程序可改为:
from __future__ import print_function
list = ["apple", "banana", "grape", "orange"]
for x in range(len(list)):
print('list[%d]:'%x,end='')
for y in range(len(list[x])):
print(list[x][y],sep='',end='')
print('')

至于: 'list[%d]:'%x 这里的百分号,是一个对字符串的操作符。百分号使得百分号前面的字符串中

的%d被百分号后的x的值替换掉。

10. 如何用Python os.path.walk方法遍历搜索文件内容的操作详解

本文是关于如何用Python os.path.walk方法遍历搜索文件目录内容的操作详解的文章,python 代码中用os.path.walk函数这个python模块的方法来遍历文件,python列出文件夹下的所有文件并找到自己想要的内容。
文中使用到了Python os模块和Python sys模块,这两个模块具体的使用方法请参考玩蛇网相关文章阅读。
Python os.path.walk方法遍历文件搜索内容方法代码如下:
?

041
import os, sys#代码中需要用到的方法模块导入 listonly = False skipexts = ['.gif', '.exe', '.pyc', '.o', '.a','.dll','.lib','.pdb','.mdb'] # ignore binary files def visitfile(fname, searchKey): global fcount, vcount try: if not listonly: if os.path.splitext(fname)[1] in skipexts: pass elif open(fname).read().find(searchKey) != -1: print'%s has %s' % (fname, searchKey) fcount += 1 except: pass vcount += 1 #www.iplaypy.com def visitor(args, directoryName,filesInDirectory): for fname in filesInDirectory: fpath = os.path.join(directoryName, fname) if not os.path.isdir(fpath): visitfile(fpath,args) def searcher(startdir, searchkey): global fcount, vcount fcount = vcount = 0 os.path.walk(startdir, visitor, searchkey) if __name__ == '__main__': root=raw_input("type root directory:") key=raw_input("type key:") searcher(root,key) print 'Found in %d files, visited %d' % (fcount, vcount)

阅读全文

与遍历搜索python相关的资料

热点内容
c语言编译之后如何运行 浏览:566
mfc多线程编程视频 浏览:410
c编译的中文怎么写 浏览:91
单片机连接蜂鸣器电路 浏览:844
程序员买房前后对比照 浏览:988
cmdjava中文乱码 浏览:947
窗口app哪个好 浏览:731
xzforandroid 浏览:577
程序员那么可爱歌曲完整版 浏览:906
为什么购买pdf 浏览:45
操作系统代码编译 浏览:483
程序员东北大学 浏览:426
编译忽略空字符 浏览:117
多店铺阿里云服务器教程 浏览:378
单片机求初值 浏览:420
安卓机如何在电脑备份图片 浏览:925
ca证书加密机价格 浏览:798
天干地支年份算法 浏览:797
程序员打造的视频 浏览:7
java和php通信 浏览:681