2014-03-02 143 views
1

我有一组文件保存在笔记本电脑中。该文件夹结构是这样的:使用os.walk查找文件路径

Part1(folder) 
Part1(subfolder) 
    awards_1990 (subfolder) 
    awards_1990_00 (subfolder) 
     (files) 
    awards_1990_01 
     (files) 
     ... 
     ... 
     ... 
    awards_1991 
    awards_1991_01 
     (files) 
    awards_1991_01 
    awards_1991_01 
    ... 
    ... 
    ... 
    awards_1992 
    ... 
    ... 
    ... 
    awards_1993 
    ... 
    ... 
    ... 
    awards_1994 
    ... 
    ... 
    ... 

所以我想提取与os.walk文件路径的列表。我的代码是这样的:

import os 
matches=[] 
for root, dirnames, dirname in os.walk('E:\\Grad\\LIS\\LIS590 Text mining\\Part1\\Part1'): 
    for dirname in dirnames: 
     for filename in dirname: 
       if filename.endswith(('.txt','.html','.pdf')): 
      matches.append(os.path.join(root,filename)) 

当我调用匹配时,它返回[]。

我尝试另一个代码:

import os 
dirnames=os.listdir('E:\\Grad\\LIS\\LIS590 Text mining\\Part1\\Part1') 
for filenames in dirnames: 
    for filename in filenames: 
     path=os.path.join(filename) 
     print (os.path.abspath(path)) 

这一个给我我这样的结果:

C:\Python32\a 
C:\Python32\w 
C:\Python32\a 
C:\Python32\r 
C:\Python32\d 
C:\Python32\s 
C:\Python32\_ 
C:\Python32\1 
... 

研究这个错误。任何想法如何处理这个?

+0

endswith只接受一个项目... –

+0

我用它之前有多个项目,它运作良好。 –

+0

...,但它会接受要查找的项目元组。 – Nabla

回答

0

for filename in dirname:枚举个别字符 in dirnamestring。尝试:

#!/usr/bin/env python 
import os 

topdir = r'E:\Grad\LIS\LIS590 Text mining\Part1\Part1' 
matches = [] 
for root, dirnames, filenames in os.walk(topdir): 
    for filename in filenames: 
     if filename.endswith(('.txt','.html','.pdf')): 
      matches.append(os.path.join(root, filename)) 
print("\n".join(matches)) 

你不需要for -loop与dirnames这里。

+0

谢谢。当我试图运行这个代码时,Python一直在死我的面前。它是一个代码问题或Python与Windows的兼容性?我仍然运行Windows Vista(32位)操作系统。安装路径是c:/ Python32。它虽然工作之前,虽然... –

+0

@ Q-ximi:你有没有试图定义'topdir'变量? “不断地死在我身上”是不是很丰富。从命令行运行它并发布完整的回溯。 – jfs

+0

好吧,我只是试图定义topdir,现在它给了我ERROR13,权限被拒绝。代码如下:'输入os matches = [] root = open(r'E:\ Grad \ LIS \ LIS590文本挖掘\ Part1','r') 用于root,dirnames,文件名在os中。 (root): 对于文件名中的文件名: if filename.endswith(('.txt','。html','。pdf')): matches.append(os.path.join(root,filename) ) print(matches)' –

3

功能的endsWith需要:后缀[,开始[,结束],所以如果你有一个以上的后缀,那么你需要他们周围的括号:

if filename.endswith(('.txt','.html','.pdf')): 
+0

仍然无法正常工作。只是在帖子中更新了我的代码。 –

+0

要遍历目录树中的文件,您可以使用以下内容: '用于root,dirs,os.walk(顶级目录)中的文件: 用于文件中的文件: filename = os.path.abspath(os.path .join(root,file))' –

+0

我尝试了'在os.walk(topdirectory)中为root,dirs,files创建文件:filename = os.path.abspath(os.path.join(root,file) )'。它只给了我最后一个文件。 –