Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CSV,添加或更改列数据_Python_Django_Csv - Fatal编程技术网

Python 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

我有一个CSV文件。然后我有一些必须应用的规则,然后根据这些规则创建一个新的CSV

所以它可以走两条路:

  • 添加一个新列,该列具有自己的标题和数据
  • 获取现有列并更改该列的数据
  • 这就是我目前所拥有的

    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)