0
这仍然没有运行,但希望它会给一些更多的信息 限制文件清单:我有这段代码:从XML文件失败
#import modules
import os, sys, datetime, time
# sys.setdefaultencoding is cancelled by site.py
reload(sys) # to re-enable sys.setdefaultencoding()
sys.setdefaultencoding('utf-8')
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
now = datetime.datetime.now()
today = now.strftime("%m/%d/%Y")
processed = 0
#here if sync_list.xml doesn't exist, I ask for some user input i want to save between sessions
#then I save that info to sync_list.xml, along with the element to store files already synced
root = ET.Element("root")
synced = ET.SubElement(root, "synced")
synced.set("name", "Already Synced")
sfile = ET.SubElement(synced, "sfile")
sfile.set("date", today)
sfile.text = "firstsync"
tree = ET.ElementTree(root)
tree.write("sync_list.xml")
#If sync_list.xml already exists, then I grab the info
tree = ET.parse("sync_list.xml")
root = tree.getroot()
#I pull in all the info I need to work with and:
for elem in root.findall('sfile'):
synced = elem.text
dcheck = 0
for elem in root.findall('synced/sfile'):
fdate = elem.attrib.get('date')
if fdate == today:
dcheck += 1
synced = [elt.text for elt in root.findall('synced/sfile')]
#if sync_list.xml exists get the list of (UUIDs) $entries that have already been synced, and exclude them from the current query. If no UUID's exist in sync_list.xml, ignore
synclimit = 10 - dcheck
print "Already synced today: " + str(dcheck)
print "Today's synclimit: " + str(synclimit)
if synclimit == 0:
print "Sorry, you've reached your limit for file syncing today. The limit is reset each night at 12:00 a.m."
sys.exit()
synclimit = int(raw_input("How many files do you want to sync today? You have a max amount of " + str(synclimit) + " left today: "))
for filename in os.listdir(filepath):
if processed >= synclimit:
print "You've successfully synced " + str(synclimit) + " files."
sys.exit()
else:
if filename.endswith('.txt') and filename not in synced:
filename = os.path.join(filepath, filename)
#process the files. This is where I'm getting variable dofilename
#The processing works correctly. It's just going over the same files that have already been synced
tree = ET.parse('sync_list.xml')
synced = tree.find('synced')
sfile = ET.SubElement(synced, "sfile", date=today)
sfile.text = dofilename
tree.write('sync_list.xml', encoding='utf-8', xml_declaration=True)
processed += 1
print 'Synced ' + dofilename + '....>'
print 'done!'
和它是什么意思做的是检查sync_list文件名,而不是处理这些文件。
预期输出: 如果我有一个目录:
,我跑在第1天的剧本为5的synclimit,我希望将XML输出看起来像:
<sfile date="11/26/2012">file1.txt</sfile>
<sfile date="11/26/2012">file2.txt</sfile>
<sfile date="11/26/2012">file3.txt</sfile>
<sfile date="11/26/2012">file4.txt</sfile>
<sfile date="11/26/2012">file5.txt</sfile>
这个按预期工作,但如果我在第二天以10的同步限制运行它,我会得到:
<sfile date="11/26/2012">file1.txt</sfile>
<sfile date="11/26/2012">file2.txt</sfile>
<sfile date="11/26/2012">file3.txt</sfile>
<sfile date="11/26/2012">file4.txt</sfile>
<sfile date="11/26/2012">file5.txt</sfile>
<sfile date="11/27/2012">file1.txt</sfile>
<sfile date="11/27/2012">file2.txt</sfile>
<sfile date="11/27/2012">file3.txt</sfile>
<sfile date="11/27/2012">file4.txt</sfile>
<sfile date="11/27/2012">file5.txt</sfile>
<sfile date="11/27/2012">file6.txt</sfile>
<sfile date="11/27/2012">file7.txt</sfile>
我所期待的,会是这样,无论什么synclimit设置为,该脚本将跳过已经被处理过这些文件,而是给我这样的输出:
<sfile date="11/26/2012">file1.txt</sfile>
<sfile date="11/26/2012">file2.txt</sfile>
<sfile date="11/26/2012">file3.txt</sfile>
<sfile date="11/26/2012">file4.txt</sfile>
<sfile date="11/26/2012">file5.txt</sfile>
<sfile date="11/27/2012">file6.txt</sfile>
<sfile date="11/27/2012">file7.txt</sfile>
感恩对于任何指导,关于我误入歧途的地方。
你的代码没有什么明显的错误,但是它没有足够的能够运行它。你可以发布一个运行的例子(包括输入数据和预期输出)并显示问题。这将使我们更容易测试它。 – aquavitae
制作一个简单的文件(例如'done_list.csv'),并在当天存储一个处理文件列表;然后在程序开始时使用此文件在第二天(将来日期)进行验证;(例如:您可以验证已处理的日期为'26'的任何文件此次不会处理(在'27 'th)..并在每次处理后更新该文件中的信息..。简单.. – namit
我以为这就是我在用'if filename.endswith('。txt')和文件名不在同步:我正在检查sync_list.xml以确保条目尚未同步,如果是,我希望它会跳过它。 – sosukeinu