我在Windows机器上使用Python版本3.6。我正在使用open()和readlines()读取文本文件。在读取文本文件行后,我希望将某些行写入新的文本文件,但排除某些行的范围。我不知道要排除的行号。文本文件是巨大的,排除的行范围在我正在读取的文本文件中有所不同。有已知的关键字,我可以搜索,以找到范围的开始和结束,以排除在文本文件中,我想写。
我在网上到处搜索,但似乎找不到一个很好的解决方案。下面是我想要达到的目标的一个例子。
a
b
BEGIN
c
d
e
END
f
g
h
i
j
BEGIN
k
l
m
n
o
p
q
END
r
s
t
u
v
BEGIN
w
x
y
END
z 总之,我想将上面的内容读入Python。然后,写入一个新文件,但排除从开始开始的所有行,并在结束关键字处停止。
新文件应包含以下内容:
a
b
f
g
h
i
j
r
s
t
u
v
z 发布于 2017-10-28 18:36:28
如果文本文件是巨大的,正如您所说的,您将避免使用readlines(),因为这样会将整个文件加载到内存中。相反,逐行读取,并使用一个状态变量来控制您是否处于一个应该抑制输出的块中。有点像,
import re
begin_re = re.compile("^BEGIN.*$")
end_re = re.compile("^END.*$")
should_write = True
with open("input.txt") as input_fh:
with open("output.txt", "w", encoding="UTF-8") as output_fh:
for line in input_fh:
# Strip off whitespace: we'll add our own newline
# in the print statement
line = line.strip()
if begin_re.match(line):
should_write = False
if should_write:
print(line, file=output_fh)
if end_re.match(line):
should_write = True发布于 2017-10-28 18:16:39
发布于 2017-10-28 18:24:00
你试过这样的方法吗?
with open("<readfile>") as read_file:
with open("<savefile>", "w") as write_file:
currently_skipping = False
for line in read_file:
if line == "BEGIN":
currently_skipping = True
else if line == "END":
currently_skipping = False
if currently_skipping:
continue
write_file.write(line)基本上应该能做你需要做的事。基本上,不要通过“读行”将所有内容读入内存中,而是逐行进行更多的操作--这对于内存来说也应该更精简。
https://stackoverflow.com/questions/46992799
复制相似问题