2015-02-10 114 views
1

我有3个输出文件分别包含x,y,z坐标从文本文件中写入文本文件python

file1.txt(仅包含x) file2(Y)| file3(Z)

2.113 
3.023 
-7.234 
... 

和一个包含坐标数据的父pdb文件。我只想从pdb文件中提取与来自file1,file2,file3的x,y,z坐标匹配的那些行。这些pdb文件行是;

ATOM 1 O5' G A 93 -12.706 19.299 0.129 1.00 0.00ö

黑体值将是我匹配的标准拷贝的整行。

1-我如何合并三个输出文件来创建一个文件,这个文件可以在一行中给我x,y,z坐标以与我的脚本一起工作。

final_file = [file1,file2,file3]?

2-我如何在匹配标准上提取点;

def read_convex_points(final_file,parent_pdb): 
    with open("output.txt","w") as f1: 
     with open(final_file) as f2: 
      with open(parent_pdb) as f3: 
       for line1 in f2: 
        for line2 in f3: 
         if line1 in line2: 
          f1.write(line2) 
    return    

final_file = "file1.txt" 
parent_pdb = "original.pdb" 
read_convex_points(final_file,parent_pdb) 

我写了功能类似的东西,但如果条件不工作。

+0

您的描述有点不清楚。独立文件中的坐标是什么?例如,file1中的X坐标,file2中的Y坐标,file3中的Z坐标。 – 2015-02-10 03:41:05

+0

是的,你是对的。 – 2015-02-10 03:49:23

+0

你有2个问题,他们可能应该在单独的职位。但无论如何,如果你在Unix或Linux上,将3个文件加入1的最简单方法是使用'paste'。正如彼得的回答所显示的那样,用Python来完成工作很容易。你想在同一个程序中进行粘贴测试吗?我认为在一个单独的程序中执行它可能是一个好主意,尤其是当您需要对数据进行多次传递时。 – 2015-02-10 04:21:13

回答

0

下面是一种在Python中将多个文件粘贴在一起的方法。它可以处理任意数量的输入文件,但是像Peter的解决方案,如果这些文件具有不同数量的行,则会在最短文件用完行时停止。

输出文件中的字段由delimiter字符串分隔,默认情况下这是一个空格。

def paste(sources, dest, delimiter=' '): 
    fsrc = [open(fname, 'r') for fname in sources] 
    fdest = open(dest, 'w') 
    for t in zip(*fsrc): 
     outline = delimiter.join([line.strip() for line in t]) + '\n' 
     fdest.write(outline) 
    for f in fsrc: 
     f.close() 
    fdest.close() 


paste(('file1', 'file2', 'file3'), 'final_file') 
0

您可以合并的文件是这样的:

def merge(paths): 
    with open(paths[0]) as f1, open(paths[1]) as f2, open(paths[2]) as f3: 
     try: 
      yield next(f1), next(f2), next(f3) 
     except StopIteration: 
      return 

for x, y, z in merge((file1, file2, file3)): 
    # check if matching 

需要注意的是这个假设文件是​​等长的,所以它会停止它遇到最短文件的时刻。这可能是可以接受的。

+0

谢谢你的帮助。它给了我错误,但粘贴功能我的Linux使它简单。但是,在匹配坐标后,我的output.txt文件变空了。如果我打印line1,那么它显示的值,但不能通过以下循环。有关这个问题的任何指导?对于f2中的line1,为 : 对于f3中的line2: 如果line2在line2中: – 2015-02-10 04:35:47