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)
另外,你想如何处理不在之间的数据删除这个