python - 删除python中没有字典格式的任何行
问题描述
我正在阅读一个多行文本文件,其格式为“变量:值”作为python中的字典;但我想删除任何没有这种格式的行。我已经尝试过了,但问题是如果我们有一行包含冒号但它不是 variable:value 格式,它将不会被删除。有什么建议么?代码:
with open("file.setup",'r') as f_in:
lines = [l for l in f_in if ":" in l]
with open("file.setup",'w') as f_in:
f_in.writelines(lines)
file_to_read:/ra1/file.rpt
group_size:2
dpx:No
version:4
解决方案
我会在这里使用正则表达式。我假设变量只能包含数字、字母和下划线,并且值可以是任何字符。
>>> import re
>>>
>>> regex = re.compile(r"\w+:.+")
>>> regex.search("file_to_read:/ra1/file.rpt")
<re.Match object; span=(0, 26), match='file_to_read:/ra1/file.rpt'>
>>> regex.search("group_size:2")
<re.Match object; span=(0, 12), match='group_size:2'>
>>> regex.search(":")
您可以遍历这些行并检查此正则表达式以确保该行是变量:值格式。
>>> import re
>>>
>>> pattern = re.compile(r"\w+:.+")
>>> with open("file.setup",'r') as f_in:
... lines = [l for l in f_in if pattern.search(l)]
推荐阅读
- python - 如何在分段音频时修复 pyDub 错误“解码失败”
- c# - 通过线程传递数据以使用 C# 填充列表框
- python - 您可以使用 pymongo 在“不同”数组中获得单个值吗?
- c# - C#:如何按特定参数对对象数组列表进行排序?
- ocaml - 为什么这些明显相同的字符串不相等
- list - 使用模式匹配操作列表
- python - 尝试使用 python 导入熊猫时出错
- excel - 计算两列中“项目 A 为蓝色”的总出现次数
- c# - Net Core 调试错误:评估函数超时
- c++ - 尽管有reuse_address选项,Boost ASIO Linux的地址已经在使用中,为什么?