Python CSV,添加或更改列数据
我有一个CSV文件。然后我有一些必须应用的规则,然后根据这些规则创建一个新的CSV 所以它可以走两条路:Python CSV,添加或更改列数据,python,django,csv,Python,Django,Csv,我有一个CSV文件。然后我有一些必须应用的规则,然后根据这些规则创建一个新的CSV 所以它可以走两条路: 添加一个新列,该列具有自己的标题和数据 获取现有列并更改该列的数据 这就是我目前所拥有的 def applyRules(directory): FILES = [] for f in listdir(OUTPUT_DIR): writer = csv.writer(open("%s%s" % (DZINE_DIR, f), "wb")) for
def applyRules(directory):
FILES = []
for f in listdir(OUTPUT_DIR):
writer = csv.writer(open("%s%s" % (DZINE_DIR, f), "wb"))
for rule in Substring.objects.filter(source_file=f):
from_column = rule.from_column
to_column = rule.to_column
reader = csv.DictReader(open("%s%s" % (OUTPUT_DIR, f)))
headers = reader.fieldnames
for row in reader:
if rule.get_rule_type_display() == "substring":
string = rule.string.split(",")
# alter value
row[to_column] = string[0] + row[from_column] + string[1]
if rule.from_column == rule.to_column:
print rule.from_column
else:
print rule.from_column
将规则作为FROM_列和TO_列,如果两者相同,则列保持不变,但必须使用规则更新数据,在这种情况下,只需在当前值之前或之后添加字符串
当TO_列不同时,它只是一个新列,在新列下具有如上所述的更改数据
因此,目前我只是更改dict的值,但我不确定如何将其恢复到新的CSV等。如果您以
DictWriter()
对象的形式打开输出文件,那么您就可以很容易地写出更改后的词典。您确实需要提前确定额外的字段名:
with open(os.path.join(OUTPUT_DIR, f), 'rb') as rfile:
reader = csv.DictReader(rfile)
headers = reader.fieldnames
rules = Substring.objects.filter(source_file=f).all()
# pre-process the rules to determine the headers
for rule in rules:
from_column = rule.from_column
to_column = rule.to_column
if from_column not in headers:
# problem; perhaps raise an error?
if to_column not in headers:
headers.append(to_column
with open(os.path.join(DZINE_DIR, f), "wb") as wfile:
writer = csv.DictWriter(wfile, fieldnames=headers)
for row in reader:
for rule in rules:
from_column = rule.from_column
to_column = rule.to_column
if rule.get_rule_type_display() == "substring":
string = rule.string.split(",")
row[to_column] = string[0] + row[from_column] + string[1]
writer.writerow(reader)