Python 如何在文本文件中查找短语并在其前后删除?

Python 如何在文本文件中查找短语并在其前后删除?,python,csv,Python,Csv,我想找一句话:“删除这个”。我只想保留该短语两次出现之间的文本,并删除所有其他内容 text.text.text.text text.text.text.text text.text.text.text text.text.text.text delete this text.text.text.text text.text.text.text text.text.text.text delete this text.text.text.text text.text.text.text 这是我

我想找一句话:“删除这个”。我只想保留该短语两次出现之间的文本,并删除所有其他内容

text.text.text.text
text.text.text.text
text.text.text.text
text.text.text.text
delete this
text.text.text.text
text.text.text.text
text.text.text.text
delete this
text.text.text.text
text.text.text.text
这是我目前的代码:

import urllib2
import unicodecsv as csv
import os
import sys
import io
import time
import datetime
import pandas as pd
from bs4 import BeautifulSoup
import sys
import re

def to_2d(l,n):
    return [l[i:i+n] for i in range(0, len(l), n)]

f = open('air.txt', 'r')
x = f.readlines()

filename=r'output.csv'

resultcsv = open(filename,"wb")
output = csv.writer(resultcsv, delimiter=';',quotechar = '"', quoting=csv.QUOTE_NONNUMERIC, encoding='latin-1')

maindatatable = to_2d(x, 4)
    if 'delete this' in maindatatable.text:
                stop = 1
                break

print maindatatable
output.writerows(maindatatable)

resultcsv.close()

您可以为此使用
str.split

with open('air.txt', 'r') as f:
    x = f.read()

req_text = x.split('delete this')[1: -1]

data = []
for text in req_text:
    for line in text.strip().splitlines():
        data.append([line])
要写入csv文件,只需打开它并调用
writer.writerows

with open('output.csv', "wb") as f
    output = csv.writer(f, delimiter=';',quotechar = '"', quoting=csv.QUOTE_NONNUMERIC, encoding='latin-1')
    output.writerows(data) 
将其保存到文件:

text.text.text.text
text.text.text.text
text.text.text.text

使用
删除
而不是
删除此

req_text = x.split('delete')[1: -1]

data = []
for text in req_text:
    text = text.split('\n', 1)[1]
    for line in text.strip().splitlines():
        data.append([line])

这是一个带有开关的基本结构。即使存在多个
delete\u这对

read = False
with open('data.txt') as txt:
    for line in txt:
        if line.strip() == 'delete this':
            read = not read
        elif read:
            print line,
data.txt
设置为:

text.text.text.text1
text.text.text.text2
text.text.text.text3
text.text.text.text4
delete this
text.text.text.text5
text.text.text.text6
text.text.text.text7
delete this
text.text.text.text8
text.text.text.text9
它输出:

text.text.text.text5
text.text.text.text6
text.text.text.text7

我现在假设分隔符是完整的行。有一种方法可以实现您的目标:

import sys
delimiter = "delete this\n"
result = []
with open('air.txt', 'r') as inf:
    for line in inf:
        if line == delimiter:
            break
    else:
        sys.exit("opening delimiter missing")
    for line in inf:
        if line != delimiter:
            result.append(line)
        else:
            break
    else:
        sys.exit("closing delimiter missing")
只有在循环中没有执行
break
语句时,才会执行
for
语句所附的
else
子句。这确保了各种奇怪的文件结束条件不会打乱您的逻辑

with
语句是一种方便的方法,可以使文件可用,并确保无论发生什么情况,在使用后都能正确关闭文件

结果
列表可以通过简单的构造转换为字符串:

output = "".join(result)

另外,你想如何处理不在
之间的数据删除这个