【问题标题】:How to Filter from CSV file using Python Script如何使用 Python 脚本从 CSV 文件中过滤
【发布时间】:2012-05-10 08:37:24
【问题描述】:

我有一个包含三列的 abx.csv 文件。我想将Application 的数据过滤为Central 并将其写入同一个.csv 文件

User ID   Name        Application  

001       Ajohns      ABI
002       Fjerry      Central
900       Xknight     RFC
300       JollK       QDI
078       Demik       Central

我需要在同一个 .csv 文件的三列中写入User ID,Name,Apllication(修改现有文件)

【问题讨论】:

    标签: python csv filter


    【解决方案1】:
    import csv
    reader = csv.reader(open(r"abx.csv"),delimiter=' ')
    filtered = filter(lambda p: 'Central' == p[2], reader)
    csv.writer(open(r"abx.csv",'w'),delimiter=' ').writerows(filtered)
    

    【讨论】:

    • 这不会写列名
    【解决方案2】:

    您应该使用不同的输出文件名。即使您希望名称相同,您也应该使用一些临时名称,最后重命名文件。否则你必须首先将文件读入内存

    import csv
    with open('infile','r'), open ('outfile','w') as fin, fout:
        writer = csv.writer(fout, delimiter=' ')            
        for row in csv.reader(fin, delimiter=' '):
            if row[2] == 'Central':
                 writer.writerow(row)
    

    【讨论】:

    • 您不需要将这些 with 上下文管理器嵌套在单独的缩进级别上。相反,请with open('infile','r), open ('outfile','w') as fin, fout:
    • 其实,还要注意这里需要指定一些方言参数。 delimiter=" " 至少。
    • 我以为OP可以自己做点什么
    • 如果他复制并粘贴你的代码,它不会起作用,而且他也不知道为什么。您至少可以包含一个免责声明,他需要针对空格分隔的文件进行调整 - 指向 csv 模块文档的指针不会受到伤害。作为奖励,这让 OP 养成了阅读文档的习惯——双赢​​!
    • 这个真的不行,应该是with open('infile','r') as fin, open ('outfile','w') as fout:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多