Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python在csv中基于列名写入标题_Python_Csv - Fatal编程技术网

如何使用python在csv中基于列名写入标题

如何使用python在csv中基于列名写入标题,python,csv,Python,Csv,我包含一个tsv文件,我正在尝试将获取的数据打印到tsv文件中的特定头 这就是我的桌子的样子。现在,我正在尝试扫描一些数据,并打印到1-生成,1-链,2-生成,2-链。。。。根据我找到的匹配数 问题是,我需要将数据打印到每个生成的列,而不打印到前3列。此外,我还尝试以特定的方式打印到每一列。对于“generated”列,我只想在查找生成的数据时打印到generated列,而不是chains列。“链”列也是如此 在本例中,我需要打印第1行“Author”中备注350之后的第一个单词,第2行打印

我包含一个tsv文件,我正在尝试将获取的数据打印到tsv文件中的特定头

这就是我的桌子的样子。现在,我正在尝试扫描一些数据,并打印到1-生成,1-链,2-生成,2-链。。。。根据我找到的匹配数

问题是,我需要将数据打印到每个生成的列,而不打印到前3列。此外,我还尝试以特定的方式打印到每一列。对于“generated”列,我只想在查找生成的数据时打印到generated列,而不是chains列。“链”列也是如此

在本例中,我需要打印第1行“Author”中备注350之后的第一个单词,第2行打印字母

期望输出:


我建议首先将文件中的相关数据提取到字典列表中,然后从该列表中创建数据框:

from glob import glob
import pandas as pd

files = glob('./folder_name/*.pdb') #specify the path to your folder with pdb files to create a list of all files

all_data = [] #empty list to populate

for filename in files: #iterate over the files
  with open(filename, "r") as f:
    data = {'FILENAME': filename.split('.')[0]} #create dictionary to populate with data
    lines = f.read().splitlines() #create list of lines

    for line in lines: #iterate over lines
      if 'REMARK 350' in line:
        if 'BIOMOLECULE: ' in line:
          nr = int(line.rsplit(': ', 1)[1].strip()) #extract number
        elif 'AUTHOR DETERMINED BIOLOGICAL UNIT: ' in line:
          data[f'{nr}-generated'] = line.rsplit(': ', 1)[1].strip() #populate dict, key is dynamically generated from the number
        elif 'APPLY THE FOLLOWING TO CHAINS: ' in line:
          data[f'{nr}-chains'] = line.rsplit(': ', 1)[1].strip()
    data['BIOMOLECULES'] = list(range(1, nr+1)) #add list of biomolecules
  all_data.append(data) #append dict to list

df = pd.DataFrame(all_data) #create dataframe
在我从github获得的两个
pdb
文件上运行此命令,得到以下输出:

文件名 1-生成 1-链 2-生成 双链 生物分子 0 4gjt 四聚体 A、 B 单体 C [1, 2] 1. 2n0n_M1 单体 A. [1]
如果不知道
pdb
文件的外观以及您希望如何将数据写入
tsv
文件,就很难对这个问题进行评论。如果您可以使用
tsv
文件的纯文本(无图像)样本、
pdb
文件的纯文本(无图像)样本以及所需输出的示例来更新问题,这将非常有用。也可能是你工作的相关模块。你好,我更新了。我试过这个。有没有一种方法可以使用pandas简单地搜索我所有文件中的每个关键字,并根据列名打印到每一列?这是可能的,但效率很低,因为它需要对每个关键字搜索进行查找(逐行迭代)。在我的示例中,每个文件只迭代一次。如何为第3行指定文件的位置?我尝试放置直接位置,但随后出现了一个错误,即索引超出nr=int的范围(line.rsplit(“:”,1)[1].strip())。该示例假定所有pdb文件都在同一文件夹中。Glob在文件夹中创建一个文件列表,并在其上循环
glob('./folder\u name/*.pdb')
:用带有pdb文件的文件夹的路径替换
/folder name/
*。pdb
指示glob应该查找扩展名为
.pdb
的所有文件。我收到一个错误:nr=int(line.rsplit(':',1)[1].strip())#提取编号索引器:列表索引超出范围