我通过我的第一个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')
非常感谢您提供的任何帮助。
答案 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')