我的python脚本执行os.listdir(path)
,其中路径是包含我需要逐个处理的档案的队列。
问题是我在数组中获取列表,然后我只做一个简单的array.pop(0)
。它工作正常,直到我把项目置于颠覆。现在我在我的数组中得到.svn
文件夹,当然它会使我的应用程序崩溃。
所以这是我的问题:在执行os.listdir()
时是否存在忽略隐藏文件的现有函数,如果不是最佳方法?
谢谢。
答案 0 :(得分:77)
你可以自己写一个:
def listdir_nohidden(path):
for f in os.listdir(path):
if not f.startswith('.'):
yield f
或者您可以使用glob:
def listdir_nohidden(path):
return glob.glob(os.path.join(path, '*'))
其中任何一个都会忽略以'.'
开头的所有文件名。
答案 1 :(得分:26)
这是一个老问题,但似乎缺少使用列表理解的明显答案,所以我在这里添加它是为了完整性:
[f for f in os.listdir(path) if not f.startswith('.')]
作为旁注,文档状态listdir
将以“任意顺序”返回结果,但常见的用例是按字母顺序排序。如果您希望按字母顺序对目录内容进行排序而不考虑大写,则可以使用:
sorted([f for f in os.listdir('./')], key=lambda f: f.lower())
答案 2 :(得分: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
答案 3 :(得分:12)
filter( lambda f: not f.startswith('.'), os.listdir('.'))
答案 4 :(得分:11)
答案 5 :(得分:6)
我认为循环中的所有项目都是太多的工作。我更喜欢这样简单的东西:
lst = os.listdir(path)
if '.DS_Store' in lst:
lst.remove('.DS_Store')
答案 6 :(得分:1)
let image : UIImage = UIImage(data: filteredAry[indexPath.row] as! Data)
cell2.dataimage.image = image