首页 > 解决方案 > 如何在 Python 中删除仅包含数值而不删除通配符的行?

问题描述

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

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

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

标签: pythontext-parsing

解决方案


你不应该只检查任何数字,你应该检查是否都是非数字(或空格)。尝试类似:

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)

推荐阅读