如何使用python在csv中基于列名写入标题
我包含一个tsv文件,我正在尝试将获取的数据打印到tsv文件中的特定头 这就是我的桌子的样子。现在,我正在尝试扫描一些数据,并打印到1-生成,1-链,2-生成,2-链。。。。根据我找到的匹配数 问题是,我需要将数据打印到每个生成的列,而不打印到前3列。此外,我还尝试以特定的方式打印到每一列。对于“generated”列,我只想在查找生成的数据时打印到generated列,而不是chains列。“链”列也是如此 在本例中,我需要打印第1行“Author”中备注350之后的第一个单词,第2行打印字母 期望输出:如何使用python在csv中基于列名写入标题,python,csv,Python,Csv,我包含一个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())#提取编号索引器:列表索引超出范围