Python 以写入.CSV文件的形式发布?
我有一个如下所示的文本文件: geoList.txtPython 以写入.CSV文件的形式发布?,python,regex,python-2.7,csv,Python,Regex,Python 2.7,Csv,我有一个如下所示的文本文件: geoList.txt Receptor Name:I151T.B99990002_mus.pdbqt Ligand Name: LIGAND 1 Using random seed: 1896818552 mode | affinity | dist from best mode | (kcal/mol) | rmsd l.b.| rmsd u.b. -----+------------+----------+---------- 1
Receptor Name:I151T.B99990002_mus.pdbqt
Ligand Name: LIGAND 1
Using random seed: 1896818552
mode | affinity | dist from best mode
| (kcal/mol) | rmsd l.b.| rmsd u.b.
-----+------------+----------+----------
1 -10.7 0.000 0.000
2 -10.4 1.859 3.037
3 -10.1 1.992 3.474
Receptor Name: I151T.B99990001_mus.pdbqt
Liang Name: LIGAND 1
Using random seed: 1896818552
mode | affinity | dist from best mode
| (kcal/mol) | rmsd l.b.| rmsd u.b.
-----+------------+----------+----------
1 -9.5 0.000 0.000
2 -9.4 2.083 3.784
3 -9.0 2.471 8.360
4 -9.0 1.493 3.523
我提取了带有模式受体名称的标题:并通过regex将其与相应的值连接起来。然后我试着用它制作CSV文件
import os
import re
import csv
import sys
h=open("path/geoList.txt","r")
totallog=[]
for line in h:
if line.startswith('Receptor Name:'):
prefix=line
elif re.search(r'^\s+\d', line):
totallog.append(re.sub(r'\s+',';',((str(re.findall(r'\d+',((prefix.strip().split("/")[-1])[:-10]).split(".")[0]))+(prefix.strip().split("/")[-1])[:-10]+line).replace("']",";")).replace("['",'').strip()))
with open("Hi.CSV", 'wb') as csvfile:
logwriter = csv.writer(csvfile, delimiter=';', quoting=csv.QUOTE_MINIMAL)
logwriter.writerow(['MUTANTPOSITION','MUTANT','RANK','AFFINITY (kcal/mol)','DistFromRmsd l.b.','BestModeRmsd u.b.'])
k=sorted(totallog,key=lambda x:float(x.split(';')[-3]))
for i in k:
logwriter.writerow(i)
我的输出:
MUTANTPOSITION;MUTANT;RANK;AFFINITY (kcal/mol);DistFromRmsd l.b.;BestModeRmsd u.b.
1;5;1;";";I;1;5;1;T;.;B;9;9;9;9;0;0;0;2;";";1;";";-;1;0;.;7;";";0;.;0;0;0;";";0;.;0;0;0
1;5;1;";";I;1;5;1;T;.;B;9;9;9;9;0;0;0;2;";";2;";";-;1;0;.;4;";";1;.;8;5;9;";";3;.;0;3;7
1;5;1;";";I;1;5;1;T;.;B;9;9;9;9;0;0;0;2;";";3;";";-;1;0;.;1;";";1;.;9;9;2;";";3;.;4;7;4
1;5;1;";";I;1;5;1;T;.;B;9;9;9;9;0;0;0;1;";";1;";";-;9;.;5;";";0;.;0;0;0;";";0;.;0;0;0
1;5;1;";";I;1;5;1;T;.;B;9;9;9;9;0;0;0;1;";";2;";";-;9;.;4;";";2;.;0;8;3;";";3;.;7;8;4
1;5;1;";";I;1;5;1;T;.;B;9;9;9;9;0;0;0;1;";";3;";";-;9;.;0;";";2;.;4;7;1;";";8;.;3;6;0
1;5;1;";";I;1;5;1;T;.;B;9;9;9;9;0;0;0;1;";";4;";";-;9;.;0;";";1;.;4;9;3;";";3;.;5;2;3
但是,这里每个字符都用“;”分隔。我真的不知道这是怎么发生的
我希望输出如下所示:
MUTANTPOSITIONMUTANTRANKAFFINITY (kcal/mol)DistFromRmsd l.b.BestModeRmsd u.b.
151;I151T.B99990002;1;-10.7;0.000;0.000
151;I151T.B99990002;2;-10.4;1.859;3.037
151;I151T.B99990002;3;-10.1;1.992;3.474
151;I151T.B99990001;1;-9.5;0.000;0.000
151;I151T.B99990001;2;-9.4;2.083;3.784
151;I151T.B99990001;3;-9.0;2.471;8.360
151;I151T.B99990001;4;-9.0;1.493;3.523
如果有人知道怎么做,你能帮我解决这个问题吗
提前感谢代码中的最后一个for循环是遍历列表中每个字符串的每个字符,这将分隔字符。用以下部件替换该部件,该部件应能正常工作:
for i in k:
logwriter.writerow(i.split(';'))
代码中的最后一个for循环是遍历列表中每个字符串的每个字符,这将分隔字符。用以下部件替换该部件,该部件应能正常工作:
for i in k:
logwriter.writerow(i.split(';'))
输出为:
MUTANTPOSITION,MUTANT,RANK,AFFINITY (kcal/mol),DistFromRmsd l.b.,BestModeRmsd u.b.
151,Receptor,Name:I151T.B99990002,1,-10.7,0.000,0.000
151,Receptor,Name:I151T.B99990002,2,-10.4,1.859,3.037
151,Receptor,Name:I151T.B99990002,3,-10.1,1.992,3.474
151,Receptor,Name:,I151T.B99990001,1,-9.5,0.000,0.000
151,Receptor,Name:,I151T.B99990001,2,-9.4,2.083,3.784
151,Receptor,Name:,I151T.B99990001,3,-9.0,2.471,8.360
151,Receptor,Name:,I151T.B99990001,4,-9.0,1.493,3.523
输出为:
MUTANTPOSITION,MUTANT,RANK,AFFINITY (kcal/mol),DistFromRmsd l.b.,BestModeRmsd u.b.
151,Receptor,Name:I151T.B99990002,1,-10.7,0.000,0.000
151,Receptor,Name:I151T.B99990002,2,-10.4,1.859,3.037
151,Receptor,Name:I151T.B99990002,3,-10.1,1.992,3.474
151,Receptor,Name:,I151T.B99990001,1,-9.5,0.000,0.000
151,Receptor,Name:,I151T.B99990001,2,-9.4,2.083,3.784
151,Receptor,Name:,I151T.B99990001,3,-9.0,2.471,8.360
151,Receptor,Name:,I151T.B99990001,4,-9.0,1.493,3.523
没问题。我很高兴这有帮助。没问题。我很高兴它能帮上忙。not not@user3805057:not not@user3805057:not not not@user3805057: