【问题标题】:Issue in writing .CSV file?写入 .CSV 文件有问题吗?
【发布时间】:2015-12-10 04:34:15
【问题描述】:

我有一个如下文本文件:

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        -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

我提取了带有“受体名称:”模式的标头,并通过正则表达式将其与相应的值连接起来。然后我尝试用它制作 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

如果有人知道怎么做,你能帮我解决这个问题吗?

提前致谢

【问题讨论】:

    标签: python regex python-2.7 csv


    【解决方案1】:

    代码中的最后一个 for 循环是遍历列表中每个字符串的每个字符,用于分隔字符。将该部分替换为以下内容,它应该可以工作:

    for i in k:
        logwriter.writerow(i.split(';'))
    

    【讨论】:

    • 没问题。我很高兴它有所帮助。
    【解决方案2】:
    import os 
    import re
    import csv
    import sys
    
    h=open("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, 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.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
    

    【讨论】:

    • 不提@user3805057 :)
    猜你喜欢
    • 2021-05-07
    • 2021-12-29
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多