[英]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.