循环遍历Python中的文件目录

时间:2012-11-20 19:07:40

标签: python loops elementtree os.walk

我通过我的第一个python脚本的99%,但我正在通过目录中的文件相应的for-each循环被绊倒。我的脚本正在处理单个文件,我只是不确定如何将它应用于多个文件,一次一个。

我有一个路径path = ~/documents和一个包含我要排除的文件名的XML文件:

 <root><synced name="Already Synced"><sfile name="Filename">base</sfile><sfile name="Filename">File1.blah</sfile><sfile name="Filename">File2.blah</sfile><sfile name="Filename">File3.blah</sfile></synced></root>

如何在所有以*.blah结尾且不在XML sfile中的文件上运行我的脚本?

我有这个,但这是禁止的:

path = '~/documents'
tree = ET.parse("sync_list.xml")
root = tree.getroot()
for elem in root.findall('sfile'):
    synced = elem.text
do_library = os.listdir(path)
if glob.fnmatch.fnmatch(file,"*.blah") and not synced:
  for entry in do_library:
    file = os.path.join(path, entry)
    result = plistlib.readPlist('file')

非常感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

import fnmatch
import os

path = os.path.expanduser('~/documents')
tree = ET.parse("sync_list.xml")
root = tree.getroot()
synced = [elt.text for elt in root.findall('synced/sfile')]
for filename in os.listdir(path):
    if fnmatch.fnmatch(filename, '*.blah') and filename not in synced:
        filename = os.path.join(path, filename)

编辑:添加了os.path.expanduser,如@mata。

所示

答案 1 :(得分:1)

path = '~/documents'

这不会为您提供主目录中的documents文件夹。 ~并不真正代表主目录,你可以使用它,好像它通常是外壳进行代字扩展。没有它,~可以是任何文件或目录的名称,python将其视为此类。要正确使用,请使用:

path = os.path.expanduser('~/documents')