代码之家  ›  专栏  ›  技术社区  ›  Catalyst

在单列中查找一式四份并写入新的csv文件

  •  -1
  • Catalyst  · 技术社区  · 3 年前

    我遵循了马丁·埃文斯的python脚本 post ,并且不确定如何写入新的excel电子表格。

    以下是修改后的脚本,用于在中搜索一式四份:

    import csv
    from collections import Counter
    
    def FindQuad(in_list):
        counts = Counter(in_list)
        four_or_more = [item for item, count in counts.items() if count >= 4]
        print(four_or_more)
        return len(four_or_more) > 0
    
    with open('Finding quadruplicates.csv', 'rt') as f_input:
        col_a = [row[0] for row in csv.reader(f_input)]
    
    print(FindQuad(col_a))
    
    with open('newfile.csv','w') as csvfile:
        fieldnames=['IDs']
        write=csv.writer(f_input)
        writer.writerow(fieldnames)
        for key, value in FindQuad.items():
            writer.writerow(list(key) + [value]) 
    

    我的VSC终端显示此错误:

    NameError:未定义名称“writer”。你的意思是:“写”吗?

    有人能帮忙吗?谢谢

    在@PCM注释后编辑的脚本,并针对可能的缩进错误进行了修改:

    import csv
    from collections import Counter
    
    def FindQuad(in_list):
        counts = Counter(in_list)
        four_or_more = [item for item, count in counts.items() if count >= 4]
        print(four_or_more)
        return len(four_or_more) > 0
    
    with open('Finding quadruplicates.csv', 'rt') as f_input:
        col_a = [row[0] for row in csv.reader(f_input)]
    
    # print(FindQuad(col_a))
    
        with open('newfile.csv','w') as csvfile:
            fieldnames=['IDs']
            write=csv.writer(csvfile)
            write.writerow(fieldnames)
            for key, value in FindQuad.items():
                write.writerow(list(key) + [value])
    

    现在我得到这个错误:

    第19行,在 对于键,FindQuad.items()中的值: AttributeError:“function”对象没有属性“items”

    有人能帮忙吗?谢谢

    1 回复  |  直到 3 年前
        1
  •  0
  •   PCM    3 年前

    您将变量定义为 write ,所以只使用那个词-

    write=csv.writer(f_input)
    write.writerow(fieldnames) # You didn't declare writer, so it is write
    for key, value in FindQuad.items():
        write.writerow(list(key) + [value]) 
    

    或者,您可以将其声明为 writer=csv.writer(f_input) ,然后使用 writer 用于代码。