簡體   English   中英

從現有文件中將行寫入新文件

[英]Writing lines to new file from existing file

我有一個接近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的新手,所以我為基本問題道歉,但我找不到有同樣問題的問題。 謝謝!!

如果我理解正確你可以修改你的方法有一個標志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

請養成使用上下文管理器和文件的習慣。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM