提取特定文本行并使用Python

时间:2017-05-22 19:02:57

标签: python

我是python的新手,我在创建脚本时遇到了一些麻烦。我有一个这样的文本文件(简化):

Not of interest
Not of interest    
-object[bla bla    
-bla bla    
-bla bla    
Not of interest    
Not of interest

1)我想提取包含“ - ”的所有行。我用

做到了
import sys
Input=open(sys.argv[1],'r')
Lines=open('Line', 'w')
with Input as file:
    for line in Input:
        if '-' in line:
            Lines.write(line)
Input.close()
Lines.close()

获取此

-object[bla bla
-bla bla
-bla bla

2)在提取的所有行中,将“[”替换为“\ n-”。我用

做到了
import sys, re
Input=open(sys.argv[1],'r')
with Input as file:
    Output = Input.read()
    Output = Output.replace('[', '\n-')    
with open('Output', 'w') as file:    
    file.write(Output)

获取此

-object
-bla bla
-bla bla
-bla bla

3)如何将这两个脚本的所有段落合并为一个?

提前感谢提前为您提供帮助

2 个答案:

答案 0 :(得分:0)

with open("input.txt", "r") as inputFile, open("output.txt", "w") as outputFile:
  for line in inputFile:
    if "-" in line:
      outputFile.write(line.replace('[', "\n-"))

为了测试这一点,我不得不将输入文件更改为更有趣:

<强> input.txt中

Not of interest
-object[bla bla
-no square brackets here
there's one [ here-
Not of interest
-and a trailing one here[
-there's-[-two-[-here-
hats[[[!
-I think the [expected input is [more like this

输出如下:

<强> output.txt的

-object
-bla bla
-no square brackets here there's one 
- here-
-and a trailing one here
-
-there's-
--two-
--here-
-I think the 
-expected input is 
-more like this

这很简单,但让我们分解一下:

with open("input.txt", "r") as inputFile, open("output.txt", "w") as outputFile:

这将打开一个处于读取模式的文件用于输入,另一个处于(截断和)写入模式以进行输出。它位于with块中,因为您应该始终使用with开放。处理文件,输入或输出以及优雅的with句柄时,您可能会遇到错误。

for line in inputFile:

使用inputFile作为迭代器,逐行逐步执行。我没有将此文件流命名为input,因为它已经是内置Python关键字input()的名称。不想迷惑自己。

if "-" in line:

检查该行是否包含“ - ”,如果有,则继续。如果没有,不做任何事情,继续前进到下一行。

outputFile.write(line.replace('[', "\n-"))

write()直接到文件,绕过Python的print()接口。我们在前一行代码中编写了一个带“ - ”的行,但在我们写出来之前,我们用'\ n - 替换了所有的'。'。

如您所见,如果您能够理解逻辑和程序流程,那么这是一个非常简单的方法。只有4行。

答案 1 :(得分:0)

这是你可以采取的一种方式:

f = open("target.txt","r+")
d = f.readlines()
f.seek(0)
for i in d:
    if i != "line you want to remove...":
        f.write(i)
f.truncate()
f.close()

通过阅读该行,您可以指定要删除的行

您需要稍微编辑一下以满足您的特定需求,但如果您有任何疑问,请与我联系。 希望这有帮助!