2

我已经完成了我的第一个 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 结尾且不在 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')

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

4

2 回答 2

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)

编辑:按照@mata 的建议添加了 os.path.expanduser。

于 2012-11-20T19:12:47.447 回答
1
path = '~/documents'

这不会为您提供documents主目录中的文件夹。~并不是真正代表主目录,而是让您使用它,就好像它通常是 shell 进行波浪号扩展一样。没有它,~可以是任何文件或目录的名称,python 将其视为这样。要正确获取它,请使用:

path = os.path.expanduser('~/documents')
于 2012-11-20T19:16:02.347 回答