python - 如何在 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
。需要动态删除带有数字的行。
解决方案
你不应该只检查任何数字,你应该检查是否都是非数字(或空格)。尝试类似:
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)
推荐阅读
- bash - 术语陷阱(Bash)是否比编程中的通用“回调”术语更准确?
- mongodb - mongodb json验证在独立的mongo中不起作用
- azure-data-factory - 通过 ADF V2 到 ADLS Gen2 的本地 SQL 服务器
- android - 持续的 Firebase 数据库在方向更改时崩溃
- excel - 忽略为空的标准。有办法吗?
- python - 在本地运行我的工作 webapp,但无法访问正确的站点
- ios - 在构建之后(但在安装之前)向 Info.plist 数组添加值
- javascript - 无法在 res.json 中获得响应
- python - 在两个单独的列中按时间戳对数据帧进行排序
- angular - Firefox 上溢出-y 的轮播问题