首页 > 解决方案 > 如何使用python将文本提取到数据框或csv中的每一行

问题描述

我有一个文本文件包含

[(XXX)].XX>[(XXX)].X.XXX
XXX.[(X)].[(XXX)]>>[(XXX)].XX

大约有 10k 行。[(XXX)], XX 论文可以是其中的 1 到 10 个。

我想要 2 个数据框/CSV 包含

数据框 1

     1       2       3         
1 [(XXX)]   XX 
2 XXX      [(X)]  [(XXX)]

数据框 2

     1        2    3   
1  [(XXX)]    X   XXX
2  [(XXX)]   XX

我正在尝试这样但失败了

def get_sentences(filename):
    with open(filename) as file_contents:
        d1, d2 ,d3= '>', '>>','.' # just example delimiters
        results = []
        for line in file_contents:
            if d1 in line:
                results = []
            elif d2 in line:
                yield results
            else:
                results.append(line)

感谢任何建议。

实际数据集

[Na+].[CH3:2][C:3](=[O:5])[O-].[CH3:6][c:7]1[cH:12][cH:11][cH:10][cH:9][cH:8]1>>[c:7]1([CH3:6])[c:12]([C:3]([c:2]2[cH:11][cH:12][cH:7][cH:8][c:9]2[CH3:10])=[O:5])[cH:11][cH:10][cH:9][cH:8]1
[CH:1]1([C:4]([c:6]2[cH:11][cH:10][c:9]([C:12]([CH3:20])(C)[C:13](N(C)OC)=O)[cH:8][cH:7]2)=[O:5])[CH2:3][CH2:2]1.[BrH:21].[C:22](=[O:25])([O-])[OH:23].[Na+]>O>[Br:21][CH2:3][CH2:2][CH2:1][C:4]([c:6]1[cH:11][cH:10][c:9]([C:12]([CH3:20])([CH3:13])[C:22]([OH:23])=[O:25])[cH:8][cH:7]1)=[O:5]

标签: pythondataframe

解决方案


首先,我们打开一个文件并使用该readlines()函数来获取所有行。然后我们遍历data变量并用.. 然后我们正在创建一个新的字典元素 - 的第一个元素splitter是键,其他元素是值。最后,使用pandas DataFrame()我们正在创建的函数DataFrameusing createddictionary

import pandas as pd
with open('file_name.txt') as f:
    data = f.readlines()
buffer = {}
for i in data:
    splitter = i.split('.')
    buffer[splitter[0]] = splitter[1:]
df = pd.DataFrame(buffer)

推荐阅读