【问题标题】:Remove certain rows without iterating the whole file line by line in Python [closed]删除某些行而不在Python中逐行迭代整个文件[关闭]
【发布时间】:2020-02-05 10:40:38
【问题描述】:

我有如下数据集:

Category,Date,Id,Amount
Risk A,11/12/2020,1,-10
Risk A,11/13/2020,2,10
Risk A,11/14/2020,3,22
Risk A,11/15/2020,4,32
Total Risk A : 4  ----- needs to be removed
Risk C,11/9/2020,5,43
Risk C,11/10/2020,6,22
Risk C,11/11/2020,7,11
Risk C,11/12/2020,8,-50
Total Risk C : 4   ----- needs to be removed
Risk D,11/12/2020,9,3
Risk D,11/13/2020,10,1
Risk D,11/14/2020,11,3
Risk D,11/15/2020,12,4
Risk D,11/9/2020,13,55
Risk D,11/10/2020,14,32
Total Risk C : 6      ----- needs to be removed

在数据行之间,有一些特定的总(摘要)行,我需要从文件中删除它们。 寻找一种更好的方法来删除这些行,而不是在 python 中逐行迭代文件。因为我有几千行并且需要花费一些时间来删除一些摘要行。 请推荐?

【问题讨论】:

    标签: python file for-loop line


    【解决方案1】:

    您可以使用Regex 执行字符串替换:

    import re
    t = """Category,Date,Id,Amount
    Risk A,11/12/2020,1,-10
    Risk A,11/13/2020,2,10
    Risk A,11/14/2020,3,22
    Risk A,11/15/2020,4,32
    Total Risk A : 4  ----- needs to be removed
    Risk C,11/9/2020,5,43
    Risk C,11/10/2020,6,22
    Risk C,11/11/2020,7,11
    Risk C,11/12/2020,8,-50
    Total Risk C : 4   ----- needs to be removed
    Risk D,11/12/2020,9,3
    Risk D,11/13/2020,10,1
    Risk D,11/14/2020,11,3
    Risk D,11/15/2020,12,4
    Risk D,11/9/2020,13,55
    Risk D,11/10/2020,14,32
    Total Risk C : 6      ----- needs to be removed"""
    
    print(re.sub(r'\nTotal.*','', t))
    

    re.sub 将查找文件中与模式匹配的所有部分(r'\nTotal.*':后跟单词“Total”的换行符,后跟任何字符直到行尾),并将它们替换为 '' .

    【讨论】:

      【解决方案2】:

      如果不单独查看每一行,就不可能知道要删除哪些行,因为如果不与每一行交互,就无法分辨哪些行是摘要,哪些不是。 (可以实现一些小的优化,例如如果两个不能连续发生,则在摘要行之后跳过下一行,但这些影响充其量是最小的)。一种可能更有效的加速程序的方法是,而不是逐行遍历文件,将整个程序读入内存,将其编辑为字符串或列表,然后将其全部写入新的一次归档。这会比听起来更快,因为输入输出操作比只作用于内存中的变量的操作花费的时间要长得多。

      【讨论】:

        猜你喜欢
        • 2016-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-12
        • 2019-09-04
        • 1970-01-01
        • 2015-08-20
        • 2021-09-08
        相关资源
        最近更新 更多