我有一个文件接近5000行(il3)。我想将文件末尾的前7行,然后将一定数量的行写到新文件(il3NEW)。我能够写前7行,但是当我尝试写后几行时,却找不到任何有效的方法。
并不是我要使用的所有文件都是相同的,所以我不只是要查看文件并选择行号并写入,我需要将原始文件“ il3”中的行写入新文件“ il3NEW”中',从提到特定单词的特定行开始,然后一直到文件末尾。
我已经成功打开了'il3'和一个空白的新文件(il3NEW)。我使用了for循环来编写前7行。当我尝试根据'il3'中某个单词的位置进行写时,我不知道如何识别该行号,然后使用该行号将从那里到文件末尾的行写到'il3NEW '。
这就是我的作品:
il3= open("il3dta",'r')
il3NEW= open("il3dtaNEW",'w')
for i in range(7):
m=il3.readline()
il3NEW.write(m)
il3.close()
il3NEW.close()
我还有以下内容添加了立即行:
for i in range(5000):
m=il3.readline()
if m == ' -1 TREE POINTS(=1),OTHERWISE NO TREE\n':
il3NEW.write(m)
但是,我也希望所有以下几行。我怎样才能让它遍历所有行并编写它们?
我还注意到,只要在for循环之前和open语句之间编写任何内容,for循环就不再起作用。例如,如果我尝试定义一些变量:
#lines=il3.readlines()
#searchquery = ' -1 TREE POINTS(=1),OTHERWISE NO TREE\n'
for循环不再起作用,我的新文件为空。
如果我以后的第二个循环是遍历整个文件而不必写5000,那也很好。我尝试过:
for i in range(len(il3.readlines( ))):
m=il3.readline()
if m == ' -1 TREE POINTS(=1),OTHERWISE NO TREE\n':
il3NEW.write(m)
但这不起作用。如果我尝试如上所述定义行数,则将导致空白文件。任何解决此问题的帮助将不胜感激!我是Python的新手,因此我为基本问题表示歉意,但找不到相同问题的问题。谢谢!
答案 0 :(得分:0)
如果我正确理解,则可以对方法进行一些修改,以使标记HaveFoundTheLineImLookingFor
正确(如果找到了特殊行)。然后,如果是这样,我们就在您的or
语句中写上每行都添加了if
:
HaveFoundTheLineImLookingFor = False
for i in range(5000):
m=il3.readline()
if (m == ' -1 TREE POINTS(=1),OTHERWISE NO TREE\n' or HaveFoundTheLineImLookingFor ):
il3NEW.write(m)
HaveFoundTheLineImLookingFor = True
一种更好的方法是不将自己限制在具有5000行的文件中:
HaveFoundTheLineImLookingFor = False
with open('il3dta') as MyFile:
for i, line in enumerate(MyFile):
if(i < 7):
il3NEW.write(line)
if(HaveFoundTheLineImLookingFor ):
il3NEW.write(line)
if(line == ' -1 TREE POINTS(=1),OTHERWISE NO TREE\n' and !HaveFoundTheLineImLookingFor ):
il3NEW.write(line)
HaveFoundTheLineImLookingFor = True
答案 1 :(得分:0)
请养成对文件使用上下文管理器的习惯。
with open('il3dra') as il3, open('il3dtaNEW', 'w') as il3_new:
found = False
for line_idx , line in enumerate(il3):
if line.strip() == ' -1 TREE POINTS(=1),OTHERWISE NO TREE':
found = True
if found or line_idx < 7:
il3_new.write(line)