我有一个来自Shell Script的if语句,并尝试将其写入python中。 但是我不知道它在python中是如何工作的。
if [[ $(ls -d $DIR1/* | grep test) ]]
上面是shell脚本..我想用python语言重写它。 它的作用是查找任何以“TEST”开头的目录 在DIR1中,如果有,它应该在if ..
中执行命令我该怎么做这个python?
我会编辑问题..
假设我的DIR1
是/tmp/doc
,在/doc
目录中,有test1,test2,get1,get2 ......
我想使用if语句检查/doc
目录内是否包含任何包含单词"test"
的目录(在本例中为test1
和test2
)< / p>
如果是,我想将test1
和test2
移动到其他目录。
谢谢
答案 0 :(得分:1)
将os.listdir
与os.path.isdir
结合使用:
path = 'YOUR/FOLDER'
# get all files in path
all_files = [os.path.join(path, f) for f in os.listdir(path) if f.startswith("test")]
# filter to keep only directories
folders = filter(os.path.isdir, all_files)
现在您可以使用空列表评估为False
的事实:
if folders:
print "has folders!"
答案 1 :(得分:0)
您可以使用os.listdir
获取目录中的所有内容,使用os.path.isdir
和d.startswith("test")
查找以&#34开头的目录; test&#34;
import os
path = "/tmp/doc"
print([d for d in os.listdir(path)
if os.path.isdir(os.path.join(d, path))
and d.startswith("test")])
如果无关紧要,请使用d.lower().startswith("test")
移动使用shutil.move
:
import os
import shutil
path = "/DIR1/"
test_dirs = (d for d in os.listdir(path)
if os.path.isdir(os.path.join(d,path ))
and d.startswith("test"))
for d in test_dirs:
shutil.move(os.path.join(d,path),"your/dest/path")
或者在一个循环中完成所有操作:
for d in os.listdir(path):
if os.path.isdir(os.path.join(d,path )) and d.startswith("test"):
shutil.move(os.path.join(d, path), "your/dest/path")
要查找以test
开头的dirs,您只需使用ls -d $DIR1/test*/
答案 2 :(得分:0)
这是您脚本的一个相对直接的等价物。请注意,您的grep
不会检查实际目录是否以“test”启动,只要在任何地方找到它,所以此代码也是如此:
import os
import glob
DIR1 = 'dir1'
pattern = os.path.join(DIR1, '*')
if any(os.path.isdir(f) and 'test' in f for f in glob.glob(pattern)):
do whatever