如何使用python忽略特定目录中的文件列表忽略符号链接?

时间:2014-10-27 11:56:11

标签: python

我需要通过创建文件名列表来处理目录中的文件名。 但我的结果列表也包含符号链接的条目。如何使用python在特定目录中获取纯文件名。

我尝试过:os.walk,os.listdir,os.path.isfile

但是所有都包含'filename~'类型的符号链接到列表中:(

glob.glob添加了我不需要的列表路径。

我需要在这样的代码中使用它:

files=os.listdir(folder)    
for f in files:
     dosomething(like find similar file f in other folder)

有任何帮助吗?或者请将我重定向到正确的答案。感谢

编辑:波形标志位于结尾

2 个答案:

答案 0 :(得分:1)

获取目录中的常规文件:

import os
from stat import S_ISREG

for filename in os.listdir(folder):
    path = os.path.join(folder, filename)
    try:
        st = os.lstat(path) # get info about the file (don't follow symlinks)
    except EnvironmentError:
        continue # file vanished or permission error
    else:
        if S_ISREG(st.st_mode): # is regular file?
           do_something(filename)

如果您仍然看到'filename~'文件名,那么这意味着它们实际上不是符号链接。只需使用他们的名字过滤它们:

filenames = [f for f in os.listdir(folder) if not f.endswith('~')]

或使用fnmatch

import fnmatch

filenames = fnmatch.filter(os.listdir(folder), '*[!~]')

答案 1 :(得分:0)

您可以使用os.path.islink(yourfile)检查您的文件是否符号链接,并将其排除。

这样的事情对我有用:

folder = 'absolute_path_of_yourfolder' # without ending /
res = []
for f in os.listdir(folder):
    absolute_f = os.path.join(folder, f)
    if not os.path.islink(absolute_f) and not os.path.isdir(absolute_f):
        res.append(f)

res # will get you the files not symlinked nor directory
...