【发布时间】:2014-02-03 21:49:54
【问题描述】:
我正在将数据写入 CSV 文件,完成后,我将文件复制到另一个目录。
这一切都在一个循环中,所以当第二次迭代开始时,它会从复制的文件中读取数据。
问题是在第二次迭代开始时文件仍在被复制,这会导致明显的问题。
如何在第二次迭代开始之前等待循环中的整个函数完成?它应该能够进行任意数量的迭代。
for rule in substring_rules:
substring(rule)
功能:
def substring(rule, remove_rows=[]):
writer = csv.writer(open("%s%s" % (DZINE_DIR, f), "wb"))
from_column = rule.from_column
to_column = rule.to_column
reader = csv.reader(open("%s%s" % (OUTPUT_DIR, f)))
headers = reader.next()
index = 0
from_column_index = None
for head in headers:
if head == from_column:
from_column_index = index
index += 1
if to_column not in headers:
headers.append(to_column)
writer.writerow(headers)
row_index = 0
for row in reader:
if rule.get_rule_type_display() == "substring":
try:
string = rule.string.split(",")
new_value = string[0] + row[from_column_index] + string[1]
if from_column == to_column:
row[from_column_index] = new_value
else:
row.append(new_value)
except Exception, e:
print e
if row_index not in remove_rows:
writer.writerow(row)
row_index += 1
shutil.copyfile("%s%s" % (DZINE_DIR,f), "%s%s" % (OUTPUT_DIR, f))
【问题讨论】:
-
把一个循环放在另一个循环下面?
-
我不确定你在说什么?循环是...中的 for 规则:
-
你不会关闭读写器
-
除了@jwalker 是正确的事实之外,我想说的是,不是一个函数可以做所有事情,而是创建多个函数,每个函数只做一些非常具体的任务。调试起来也更容易
-
您可以通过一次应用所有规则来避免复制,使用类似
for row in reader: for rule in substring_rules: ...
标签: python multithreading for-loop