簡體   English   中英

將“for”循環的 output 導出到 python 中的文件

[英]Export output of a “for” loop to a file in python

我有一個文本文件(b.txt),如下所示:

SOURCE   8 EXPRESSION_SYSTEM_PLASMID: PLEHP20                                   
KEYWDS   2 METHODS, IRON-SULPHUR CLUSTER, METALLOPROTEIN                        
EXPDTA    X-RAY DIFFRACTION                                                     
AUTHOR    E.PARISINI,F.CAPOZZI,P.LUBINI,V.LAMZIN,C.LUCHINAT,                    
REVDAT   4   24-FEB-09 1CKU    1       VERSN                                    
JRNL        PMID   10531472                                                     
REMARK   1 REFERENCE 1         
ATOM      1  N   SER A   1      -8.686  33.363  10.216  1.00 33.39           N  
ANISOU    1  N   SER A   1     2884   4416   5388   1179  -1154   1000       N  
HETATM 1565  O   HOH B 350       7.855  16.938  27.107  1.00 34.27           O  
ANISOU 1565  O   HOH B 350     3399   5455   4168    135   -563    -23       O  

我有一個 python 代碼(見下文),它只讀取以“ATOM”或“HETATOM”開頭的行。

pdb_text = open("b.txt","r")
# read contents of the file to string
data = ""
data = pdb_text.read()
for line in data.split('\n'):
    if line.startswith("ATOM") or line.startswith("HETATM"):
        print(line)

該代碼運行良好,並生成如下 output。

ATOM      1  N   SER A   1      -8.686  33.363  10.216  1.00 33.39           N  
HETATM 1565  O   HOH B 350       7.855  16.938  27.107  1.00 34.27           O  

但是,我想將 output 導出到新文件。 我應該如何更改代碼的最后一行來做到這一點?

嘗試這個:

pdb_text = open("b.txt","r")
out = open("out.txt", "w")
# read contents of the file to string
data = ""
data = pdb_text.read()
for line in data.split('\n'):
    if line.startswith("ATOM") or line.startswith("HETATM"):
        out.write(line)
out.close()
pdb_text.close()

這基本上是相同的 python 代碼,但更 Pythonic:

with open("b.txt","r") as pdb_text:
    with open("out.txt", "w") as ouy:
        for line in pdb_text:
            if line.startswith("ATOM") or line.startswith("HETATM"):
                out.write(line)

否則,您可以像這樣使用 shell 的重定向功能:

python your_program.py > out.txt

您甚至可以通過運行 python 程序(如果您使用的是 macOS,Linux 或其他 UNIX 風格)來完成您所擁有的:

cat b.txt | egrep "^ATOM|^HETATM" > out.txt

你可以試試這個(類似於以前的答案,但“a”附加到文件而不是“w”ritting):

pdb_text = open("b.txt","r")
out = open("b.txt", "a")
# read contents of the file to string
data = ""
data = pdb_text.read()
for line in data.split('\n'):
    if line.startswith("ATOM") or line.startswith("HETATM"):
        out.write(line + '\n')
out.close()
pdb_text.close()

一個更簡潔和 Pythonic 的答案是使用上下文管理器。

這會將選定的行輸出到一個名為 out.txt 的新文件

data = ""
with open("b.txt", "r") as pdb_text:
    data = pdb_text.read()

with open("out.txt", "w") as output:

    for line in data.split("\n"):
        if line.startswith("ATOM") or line.startswith("HETATM"):
            output.write(line + "\n")

暫無
暫無

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

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