将文件的部分附加到以前编写的文件的副本中

2024-09-28 23:20:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件,它将10段数据存储到一个文件中(我们将这些文件称为10S)。通常,每个部分都会获得其单独的文件。我想将每个部分附加到另一个文件中,但我需要将以前编写的文件复制10次(每个数据部分复制一次)。我试图在一个包含24个不同的10S文件的目录中执行此操作。数据的每个部分都以MODEL数字开始,并以ENDMDL结束。10S文件的格式如下:

MODEL 1
HETATM    1    N LIG L   2     103.724 127.482 115.429  1.00  1.00           N  
HETATM    2    C LIG L   2     104.244 126.274 114.627  1.00  1.00           C  
HETATM    3    C LIG L   2     104.270 124.877 115.271  1.00  1.00           C  
HETATM    4    C LIG L   2     104.790 123.669 114.469  1.00  1.00           C  
HETATM    5    C LIG L   2     106.049 122.916 114.940  1.00  1.00           C  
HETATM    6    O LIG L   2     105.991 121.396 115.179  1.00  1.00           O  
HETATM    7    O LIG L   2     107.364 123.683 115.170  1.00  1.00           O  
HETATM    8    H LIG L   2     103.707 128.376 115.017  1.00  1.00           H  
HETATM    9    H LIG L   2     103.409 127.360 116.354  1.00  1.00           H  
HETATM   10    H LIG L   2     104.574 126.402 113.658  1.00  1.00           H  
HETATM   11    H LIG L   2     103.940 124.749 116.241  1.00  1.00           H  
HETATM   12    H LIG L   2     104.992 124.020 113.479  1.00  1.00           H  
HETATM   13    H LIG L   2     104.012 122.944 114.585  1.00  1.00           H  
ENDMDL
MODEL 2
HETATM    1    N LIG L   2     103.717 127.477 115.429  1.00  1.00           N  
HETATM    2    C LIG L   2     104.273 126.292 114.619  1.00  1.00           C  
HETATM    3    C LIG L   2     104.255 124.874 115.217  1.00  1.00           C  
HETATM    4    C LIG L   2     104.812 123.689 114.407  1.00  1.00           C  
HETATM    5    C LIG L   2     106.038 122.911 114.921  1.00  1.00           C  
HETATM    6    O LIG L   2     107.364 123.649 115.179  1.00  1.00           O  
HETATM    7    O LIG L   2     105.936 121.396 115.178  1.00  1.00           O  
HETATM    8    H LIG L   2     103.728 128.384 115.046  1.00  1.00           H  
HETATM    9    H LIG L   2     103.349 127.328 116.331  1.00  1.00           H  
HETATM   10    H LIG L   2     104.658 126.448 113.674  1.00  1.00           H  
HETATM   11    H LIG L   2     103.870 124.718 116.162  1.00  1.00           H  
HETATM   12    H LIG L   2     105.071 124.069 113.441  1.00  1.00           H  
HETATM   13    H LIG L   2     104.024 122.966 114.456  1.00  1.00           H  
ENDMDL

到目前为止,我编写的代码已经成功地使用包含ENDMDL的行号上的enumerate()将每个10S节附加到一个文件中,但是我需要240个左右的重复文件,而不是一个包含所有编译内容的文件。以下是我到目前为止的情况:

import os

path ="C:\\Users\\Family\\Desktop\\School Junk\\GABA Project\\GABA Structures\\6HUP\\6HUP Entire ECD\\6HUP ECD GABA\\PYTHON COPY OF DockThor 6HUP Entire ECD GABA"
test_file_name = "PYTHON COPY OF DockThor 6HUP Entire ECD GABA DockThor 6HUP Entire ECD GABA R 2.pdb" # this is the file I'm trying to make duplicates of per 10S data section

os.chdir(path)

empty_list = []
end_of_ligand_line_num_list = [0]
pathway_tree = os.walk(path)  # os.walk gives a 2D array of all the names directories, sub directories and folders.
missing_array = []
for subdir, dirs, files_in_directory in pathway_tree: # to activates os.walk() you have to have 3 iterator variables
    for file_names in files_in_directory: # file_names is the folder of a specific sub directory, in which files are actually contained
        if  ".pdb" in file_names and "PYTHON COPY OF DockThor 6HUP Entire ECD GABA EntireECDof6HUP.pdb" != file_names:
            os.chdir(subdir)
            with open(file_names,"r") as input:
                list_of_lines = input.readlines()
                keyphrase ="ENDMDL"
                for Model_line_number, line in enumerate(list_of_lines, 0):
                    if keyphrase in line:
                        Model_line_number = int(Model_line_number)
                        end_of_ligand_line_num_list.append(Model_line_number)
                        for i in range(0 , len(end_of_ligand_line_num_list) - 1):
                            empty_list.append(list_of_lines[end_of_ligand_line_num_list[i] : end_of_ligand_line_num_list[i+1]    ] )

    no_duplicates = []
    [no_duplicates.append(d) for d in empty_list if d not in no_duplicates]

    for file_lines in no_duplicates:
        for chars in file_lines:
            with open("PYTHON COPY OF DockThor 6HUP Entire ECD GABA EntireECDof6HUP_COPYFORPYTHONDOCKTHORTEST.pdb","a") as output:
                output.write(chars)
        print(file_lines)

Tags: 文件ofinfornamesoslinelist