List files ONLY in the current directory
在python中,我只想列出当前目录中的所有文件。我不希望从任何子目录或父目录中列出文件。
似乎有类似的解决方案,但他们似乎不适合我。这是我的代码段:
1 2 3 4 5 | import os for subdir, dirs, files in os.walk('./'): for file in files: do some stuff print file |
假设我在当前目录中有两个文件,holygrail.py和tim。我也有一个文件夹,里面有两个文件,我们叫他们亚瑟和兰斯洛特。当我运行脚本时,我得到的是:
1 2 3 4 | holygrail.py Tim Arthur Lancelot |
我对HolyGrail.py和Tim很满意。但这两份文件,亚瑟和兰斯洛特,我不想列出。
用
例子:
1 2 3 | files = [f for f in os.listdir('.') if os.path.isfile(f)] for f in files: # do something |
但是在将这个应用到其他目录时要小心,比如
1 | files = [f for f in os.listdir(somedir) if os.path.isfile(f)]. |
因为
因此,为了过滤另一个目录,请执行
(感谢因果关系的提示)
为此,您可以使用
例子:
1 | files = os.listdir(os.curdir) #files and directories |
或
1 2 | files = filter(os.path.isfile, os.listdir( os.curdir ) ) # files only files = [ f for f in os.listdir( os.curdir ) if os.path.isfile(f) ] #list comprehension version. |
1 2 3 4 5 | import os destdir = '/var/tmp/testdir' files = [ f for f in os.listdir(destdir) if os.path.isfile(os.path.join(destdir,f)) ] |
您可以使用
1 2 3 4 5 | import os for entry in os.scandir('.'): if entry.is_file(): print(entry.name) |
比
这可以通过os.walk()完成。
python 3.5.2测试;
1 2 3 4 5 6 | import os for root, dirs, files in os.walk('.', topdown=True): dirs.clear() #with topdown true, this will prevent walk from going into subs for file in files: #do some stuff print(file) |
删除dirs.clear()行,子文件夹中的文件将再次包含。
用参考资料更新;
这里记录了os.walk,并讨论了正在创建的三重列表和自上而下的效果。
.clear()用于清空列表
因此,通过从os.walk中清除相关列表,您可以根据自己的需要来影响其结果。
1 2 3 4 5 | import os for subdir, dirs, files in os.walk('./'): for file in files: do some stuff print file |
您可以使用
1 2 3 4 5 6 | import os for subdir, dirs, files in os.walk('./'): del dirs[:] for file in files: do some stuff print file |
或者更好,如果您可以用当前工作目录指向os.walk。
1 2 3 4 5 6 7 | import os cwd = os.getcwd() for subdir, dirs, files in os.walk(cwd, topdown=True): del dirs[:] # remove the sub directories. for file in files: do some stuff print file |
不用
我的解决方案是:
1 2 3 | import re p = re.compile('[a-z]+', re.IGNORECASE) words = p.findall("Hello, world! I'm a coder") |
我觉得这个办法更好