【发布时间】:2019-02-08 11:06:52
【问题描述】:
我的文件看起来像这样:
# BJD K2SC-Flux EAPFlux Err Flag Spline
2457217.463564 5848.004 5846.670 6.764 0 0.998291
2457217.483996 6195.018 6193.685 6.781 1 0.998291
2457217.504428 6396.612 6395.278 6.790 0 0.998292
2457217.524861 6220.890 6219.556 6.782 0 0.998292
2457217.545293 5891.856 5890.523 6.766 1 0.998292
2457217.565725 5581.000 5579.667 6.749 1 0.998292
2457217.586158 5230.566 5229.232 6.733 1 0.998292
2457217.606590 4901.128 4899.795 6.718 0 0.998293
2457217.627023 4604.127 4602.793 6.700 0 0.998293
我需要找到并计算Flag = 1的行。 (第 5 列。)这就是我的做法:
foundlines=[]
c=0
import re
with open('examplefile') as f:
for index, line in enumerate(f):
try:
found = re.findall(r' 1 ', line)[0]
foundlines.append(index)
print(line)
c+=1
except:
pass
print(c)
在 Shell 中,我只会使用grep " 1 " examplefile | wc -l,它比上面的 Python 脚本要短得多。 python 脚本可以工作,但我对是否有比上面的脚本更短、更紧凑的方法来完成任务感兴趣?我更喜欢 Shell 的简短性,所以我希望在 Python 中有类似的东西。
【问题讨论】:
-
由于代码有效,您应该考虑将其发布到Code Review。但是,很明显,您不需要正则表达式即可在空格之间找到
1,请使用if ' 1 ' in line。 -
Python 中的大部分内容都可以放在一行中,但这会严重损害可读性。你确定尺寸对你来说是唯一重要的事情吗?
-
如果你喜欢它简短,坚持shell。
-
是的,如果可读性严重降低,我不介意它很长。好的,我会重新考虑 shell 的实现!
标签: python regex python-3.x shell text