将行从现有文件写入新文件

时间:2019-05-23 14:31:06

标签: python

我有一个文件接近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的新手,因此我为基本问题表示歉意,但找不到相同问题的问题。谢谢!

2 个答案:

答案 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)