tal*_*las 71 python hidden-files
我的python脚本执行一个os.listdir(path)
路径是包含档案的队列,我需要逐个处理.
问题是我在数组中获取列表然后我只是做一个简单的array.pop(0)
.它工作正常,直到我把项目置于颠覆.现在我得到了.svn
我的数组中的文件夹,当然它使我的应用程序崩溃.
所以这是我的问题:是否有一个现有的函数在执行时忽略隐藏文件os.listdir()
,如果不是最好的方法呢?
谢谢.
Ada*_*eld 83
你可以自己写一个:
def listdir_nohidden(path):
for f in os.listdir(path):
if not f.startswith('.'):
yield f
Run Code Online (Sandbox Code Playgroud)
或者你可以使用glob:
def listdir_nohidden(path):
return glob.glob(os.path.join(path, '*'))
Run Code Online (Sandbox Code Playgroud)
这些中的任何一个都将忽略以...开头的所有文件名'.'
.
Jos*_*ker 36
这是一个老问题,但似乎缺少使用列表理解的明显答案,所以我在这里添加它是为了完整性:
[f for f in os.listdir(path) if not f.startswith('.')]
Run Code Online (Sandbox Code Playgroud)
作为旁注,文档状态listdir
将以"任意顺序"返回结果,但常见的用例是按字母顺序排序.如果您希望按字母顺序对目录内容进行排序而不考虑大写,则可以使用:
sorted([f for f in os.listdir('./')], key=lambda f: f.lower())
Run Code Online (Sandbox Code Playgroud)
小智 16
在Windows,Linux和OS X上:
if os.name == 'nt':
import win32api, win32con
def folder_is_hidden(p):
if os.name== 'nt':
attribute = win32api.GetFileAttributes(p)
return attribute & (win32con.FILE_ATTRIBUTE_HIDDEN | win32con.FILE_ATTRIBUTE_SYSTEM)
else:
return p.startswith('.') #linux-osx
Run Code Online (Sandbox Code Playgroud)
Jos*_*Lee 13
glob:
>>> import glob
>>> glob.glob('*')
Run Code Online (Sandbox Code Playgroud)
(glob
声称使用listdir
和fnmatch
引擎盖下,但它也检查领先'.'
,而不是使用fnmatch
.)
scu*_*cum 12
filter( lambda f: not f.startswith('.'), os.listdir('.'))
Run Code Online (Sandbox Code Playgroud)
我认为一个循环遍历所有项目的工作量太大。我希望这样简单一些:
lst = os.listdir(path)
if '.DS_Store' in lst:
lst.remove('.DS_Store')
Run Code Online (Sandbox Code Playgroud)
如果该目录包含多个隐藏文件,则可以帮助您:
all_files = os.popen('ls -1').read()
lst = all_files.split('\n')
Run Code Online (Sandbox Code Playgroud)
对于平台独立性,如@Josh提到的glob效果很好:
import glob
glob.glob('*')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
64377 次 |
最近记录: |