我最近开始使用Python 3,我想知道这里是否有人能够帮助我弄清楚如何执行以下操作:
让我们假设我有一个看起来像这样的文件:
Line 0
'Phrase/String that I am looking for'
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
我想做的是
(1)从文本文件末尾开始,搜索特定的phrase/string
,
(2)一旦找到字符串,我想复制第3-5行
(3)将第9-11行替换为另一个文件,其中包含来自我的初始文本文件的第3-5行。
到目前为止,我只能找到我的字符串,但我似乎无法弄清楚如何做第2步和第3步。这是我写的:
with open("myfile.txt", 'r') as searchfile:
for line in reversed(list(searchfile)):
if 'my string' in line:
print(line)
searchfile.close()
同样,我尝试了其他一些东西,但我的脚本一直工作到这一点。所以,我只包括这个。
答案 0 :(得分:0)
这将为您提供第1部分和第2部分中的3行。
# (?m)[\S\s]*((?:^.*\r?\n){3})^.*phrase
(?m) # Multi-line modifier
[\S\s]* # Greedy, grab all up to ->
( # (1 start)
(?: # Only 3 lines of unknown text
^ .* \r? \n
){3}
) # (1 end)
^ .* phrase # Nex line contains phrase
答案 1 :(得分:0)
不确定从最后检查是必要的还是合乎逻辑的,所以如果我们找到该行并使用islice获取我们想要的行,则迭代文件内容中断,然后使用enumerate和fileinput.input使用inplace = True来修改另一个文件在适当的位置添加新行:
HWND hwnd = hWndPassedToHookCallback;
HWND hwndApp;
do
{
hwndApp = hwnd;
hwnd = GetParent(hwnd)
} while(hwnd);
// hwndApp now is the outermost application window
other.txt:
from itertools import islice
from fileinput import input as inp
import sys
with open("in.txt") as f:
sli = None
for line in f:
if line.rstrip() == 'Phrase/String that I am looking for':
f.seek(0) # reset pointer
sli = islice(f, 2, 5) # get lines 3-5, o based indexing
break
if sli is not None:
for ind, line in enumerate(inp("other.txt",inplace=True)):
if ind in {8,9,10}: # if current line is line 9 10 or 11 write the next line from sli
sys.stdout.write(next(sli))
else: # else just write the other lines
sys.stdout.write(line)
后:
1
2
3
4
5
6
7
8
9
10
11
12