我有一个目录中的文件列表。我只需要处理该目录中的某些文件。 filelist是我想要的文件列表。我该如何实现这一目标?对bash解决方案不感兴趣,因为我必须在这个Python脚本中完成所有操作。非常感谢!
for record in result:
filelist.append(record[0])
print filelist
for file in os.listdir(sys.argv[1].strip() + "/"):
for file in filelist: #This doesn't work, how else do I do this? If file equals to my desired file-list, then do something.
print file
对不起伙计们,不知道我是怎么错过这个的!清晨编码我猜!! Mods,请关闭它,除非有人想以有效的方式进行操作。
for file in os.listdir(sys.argv[1].strip() + "/"):
if file in filelist:
print file
答案 0 :(得分:3)
听起来你想做一个测试:
for file in os.listdir(sys.argv[1].strip() + "/"):
if file in filelist:
# Found a file in the wanted-list.
print file
答案 1 :(得分:3)
如果顺序和唯一性无关紧要,您可以使用set
交叉点,效率会更高。
import set
os_list = os.listdir(sys.argv[1].strip() + "/")
for file in set(os_list) & set(filelist):
#...
改进的例子:
import random
import timeit
l = [random.randint(1,10000) for i in range(1000)]
l2 = [random.randint(1,10000) for i in range(1000)]
def f1():
l3 = []
for i in l:
if i in l2:
l3.append(i)
return l3
def f2():
l3 = []
for i in set(l) & set(l2):
l3.append(i)
return l3
t1 = timeit.Timer('f1()', 'from __main__ import f1')
print t1.timeit(100) #2.0850549985
t2 = timeit.Timer('f2()', 'from __main__ import f2')
print t2.timeit(100) #0.0162533142857
答案 2 :(得分:1)
看起来你只想做这样的事情:
for file in os.listdir(sys.argv[1].strip() + "/"):
if file in filelist:
print file
请注意,我刚刚将第二个for
更改为if
。但是,由于您询问的是效率问题,因此您可能希望将filelist
从list
更改为set
或dict
来制作in
操作员更有效率。
答案 3 :(得分:1)
这样的事情:
print [x for x in os.listdir(sys.argv[1].strip() + "/") if x in filelist]