如何根据第三列中的数字删除包含三列的文本文件中的行?

时间:2016-07-27 04:01:20

标签: python text notepad++ batch-processing

我是编码此类问题的新手,我对最简单的工具或解决方案持开放态度。我知道如何使用的工具似乎都无法打开文件。我宁愿避免使用excel,因为我希望最终批处理这个过程。我已经尝试了一段时间,无法自动完成这个简单的任务。我相信有一个简单的解决方案。

我只是想找到column 3下方__包含3以外的内容的实例,其中包含3以外的其他内容删除该行。

以下是我的数据包含在文本文件中的示例,其扩展名不是.txt

 0.0004882812500000 136
 0.000000      5850  __
 4.674316   1307778   3
 9.699219   2707354   3
14.932617   4165002   3
20.051270   5590690   3
24.809082   6915874   3
24.815430   6917642   2
29.786621   8302258   3
35.123535   9788738   3
35.123535   9788738   3
40.535645  11296162   1

我需要删除第三列中不包含3的行。我是编程新手,所以我愿意接受最简单工具的建议。我试过Python,但我的知识太有限了 我也试过Notepad ++进行搜索和替换,我添加了Python插件,但我不知道从哪里开始。

如果我发布了这个错误,请道歉。

2 个答案:

答案 0 :(得分:0)

目前尚不清楚是否需要脚本化答案来重新运行流程或者可以使用手动流程来执行操作(重新阅读您的帖子并看到您最终要编写此脚本out ...正则表达式仍然应该给你一个起点,即使你移过记事本++),但这是一个快速和肮脏的场景使用Notepad ++假设你的样本数据是代表性的(第3列中的2位数字将采取另一个元素在正则表达式):

  1. 在显示数据的记事本++中,执行标记' (ctrl-H,然后选择' Mark')
  2. 选择搜索模式'正则表达式'并检查'书签行'
  3. 使用以下正则表达式:^ \ s {0,1}(\ S + \ s +){2} [012456789] $
  4. 点击“全部标记”
  5. 菜单'搜索' /书签/剪切书签行
  6. 正则表达式意思是:

    • 从行开头(插入符号)
    • 匹配零个或一个空格字符
    • 然后(2)一个或多个非空格字符后跟一个或多个空格字符的实例
    • 然后是任何不是&#39; <&#39;
    • 的数字
    • 并锚定到该行的末尾(使用$),这可能是矫枉过正:))

    希望这有帮助。

答案 1 :(得分:0)

如果您希望在python中执行此操作,那么这是一个起点:

linesWith3 = []  # Store lines with 3 in last column
with open("file.txt", "r") as f:  # Open file
    for line in f.readlines():
         cols = line.split()  # Split into array of columns
         if "3" in cols[2]:
              linesWith3.append(line)  # Store line
with open("file2.txt", "w") as f:  # Write array to file
    for line in linesWith3:
        f.write(line+'\n')