簡體   English   中英

從一個文件讀取並在Python中寫入另一個文件

[英]Reading from one file and writing into another in Python

我正在編寫一個程序,在文件中找到某些文本行,並將它們寫入另一個文件,以消除其間的所有煩人文本(它是.vmg文件)。 通過我的python和googleing技能,我編寫了以下程序。

with open("filein.txt") as f:
    with open("fileout.txt", "w") as f1:
        for line in f:
            if "telephone number" in line:
                f1.write(line)
            if "telephone number" and "X-BOX" in line:
                f1.write(line)
            if "Subject" in line:
                f1.write(line)

該程序工作正常,但對於“主題”我想告訴程序不僅要寫關鍵字“subject”的單行文本,而是直到它到達某個關鍵字(在我的情況下是“END”) :VBODY“)。 我該怎么辦?

不是最優雅的,但你可以使用一個標志來指示光標是否在Subject和END之間:VBODY ::

with open("filein.txt") as f:
    with open("fileout.txt", "w") as f1:
        for line in f:
            if in_subject:
                f1.write(line)
                if "END:VBODY" in line:
                    in_subject = False
            else:
                if "telephone number" in line:
                    f1.write(line)
                if "telephone number" and "X-BOX" in line:
                    f1.write(line)
                if "Subject" in line:
                    in_subject = True
                    f1.write(line)

如果您只需要這個特例,您可以使用簡單的狀態變量。 像這樣的東西:

inside_subject = False
with open("fileout.txt", "w") as out:
    for line in open("filein.txt", "r"):
        if inside_subject:
            if not "END:VBODY" in line:
                print line
            else:
                inside_subject = False
        else:
            if "telephone number" in line:
                out.write(line)
            elif "telephone number" in line and "X-BOX" in line: # will never match this though
                out.write(line)
            elif "Subject" in line:
                out.write(line)
                inside_subject = True

雖然如果你有更多的條件,考慮使用一些狀態機。

if "Subject" in line:
    f1.write(line[:line.index("END:VBODY")])

這是另一個工作解決方案,只需if "Subject" in line條件下的if "Subject" in line下添加while循環。

with open("filein.txt") as f:
    with open("fileout.txt", "w") as f1:
        for line in f:
            if "telephone number" in line:
                f1.write(line)
            if "telephone number" and "X-BOX" in line:
                f1.write(line)
            if "Subject" in line:
                f1.write(line)

                # new code added here
                while 'END:VBODY' not in line:
                    line = f.next()
                    f1.write(line)

暫無
暫無

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

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