【问题标题】:How to remove line with only numeric values without wildcard removal in Python?如何在 Python 中删除仅包含数值而不删除通配符的行?
【发布时间】:2021-09-24 09:47:47
【问题描述】:

我有一个包含数字和文本字符串的文本文件

21        05W104222222316011W1KKB            2564 CHURCH STREET
21        05W1045098014                      CHITTOOR PA 17125
                                                  CHECK TRANSACTIONS                            GB KDI01
                                                            TOTALS                                    PAGE 00094    DATE 07/22/21

OPERATION                    ----INPUT NUMBER----       ----REJECTED  TRANSACTIONS----    ------CHECK  EXTRACTS------
COMPANY   CASH ACCOUNT       RECORDS TRANSACTIONS           NUMBER              AMOUNT     NUMBER              AMOUNT

     21      11633                96           24                0                0.00         24            1,059.59

     21                           96           24                0                0.00         24            1,059.59

我正在尝试删除具有数值的行(完整行)

import re

with open("data.txt", 'r') as f:

    for line in f:
        if not all(i.isdigit() for i in line):
            print(line)

输出


OPERATION                    ----INPUT NUMBER----       ----REJECTED  TRANSACTIONS----    ------CHECK  EXTRACTS------

COMPANY   CASH ACCOUNT       RECORDS TRANSACTIONS           NUMBER              AMOUNT     NUMBER              AMOUNT

上面的代码也删除了非数字行...

预期输出

21        05W104222222316011W1KKB            2564 CHURCH STREET
21        05W1045098014                      CHITTOOR PA 17125
                                                  CHECK TRANSACTIONS                            GB KDI01
                                                            TOTALS                                    PAGE 00094    DATE 07/22/21

OPERATION                    ----INPUT NUMBER----       ----REJECTED  TRANSACTIONS----    ------CHECK  EXTRACTS------
COMPANY   CASH ACCOUNT       RECORDS TRANSACTIONS           NUMBER              AMOUNT     NUMBER              AMOUNT

我只想删除没有硬编码的数字行,例如删除211,059.59 之间的文本。需要动态删除带数字的行。

【问题讨论】:

    标签: python text-parsing


    【解决方案1】:

    您不应该只检查 any 数字,而应该检查 all 是否是非数字(或空格)。尝试类似:

    if not all(ch.isdigit() or ch.isspace() or ch in ",." for ch in line):
        print(line)
    

    或者通过正则表达式:

    if re.match(r"^[\s\d\.,]*$", line) is None:
        print(line)
    

    或者检查是否有任何字符串无法转换为浮点数:

    try:
        list(map(lambda value: float(value.replace(",", "")), line.split()))
    except Exception as error:
        print(line)
    

    【讨论】:

    • i 未定义?
    • @Pluviophile 我更新了答案,你能检查一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多