如何将带有原始html的CSV重新格式化为已清理的数据集csv?

亚伦

给了我一个数据集,我需要将嵌入单元格中的html转换为干净的html剥离的csv。给出了预期的结果。在html内是单独标识的文件,每个文件都必须是其自己的行。这些列位于单独的单元格中,并且具有单独的关键字(也嵌入在HTML中),需要生成到新的列中并标识为TRUE(条件是在行中找到关键字)或FALSE(条件是未找到关键字)在该行中)。解决方案需要对先前生成并标识为TRUE的关键字敏感。

我一直在搜索类似的问题作为示例,但是这个问题似乎是由于我的已知技术语言(我不是数据清理专家)或要求不寻常。

这是CSV中的典型行...

    "<div id="categories">
    <h3>Categories</h3>
    <ul>
    <li><a href="">Keyword1</a></li>
    <li><a href="">Keyword2</a></li>
    </ul>
    </div>
    ","<div id="file"><h3>File</h3>, <div id="image">
    <a href="A">A.jpg</a>
    <br/></div>
    ,  <div id="image">
    <a href="B">B.jpg</a>
    <br/></div>
    </div>
    "

每行中关键字和文件的数量各不相同。

预期结果

File, Keyword1, Keyword2, Keyword3
A.jpg, TRUE, TRUE, FALSE
B.jpg, TRUE, TRUE, FALSE
C.jpg, TRUE, FALSE, TRUE
D.jpg, FALSE, FALSE, TRUE
E.jpg, FALSE, FALSE, TRUE
Chiheb Nexus

这是使用以下方法获得所需输出的一种方法BeautifulSoup

from bs4 import BeautifulSoup as bs


a = '''
    <div id="categories">
        <h3>Categories</h3>
        <ul>
            <li><a href="">Keyword1</a></li>
            <li><a href="">Keyword2</a></li>
        </ul>
    </div>
    ","
    <div id="file">
        <h3>File</h3>,
        <div id="image">
            <a href="A">A.jpg</a>
            <br/>
        </div>
        ,
        <div id="image">
            <a href="B">B.jpg</a>
            <br/>
        </div>
    </div>
'''


def find_elms(soup, tag, attribute):
    """Find the block using it's tag and attribute values"""
    categories_block = soup.find(tag, attribute)
    if categories_block:
        return [elm.text for elm in categories_block.findAll('a')]
    return []


def pretty_print(master, categories, files):
    """Here we're just better printing the output"""
    cat = '\t'.join(['{elm:<12}'.format(elm=elm) for elm in master])
    print(cat)
    for k in files:
        out = '{file_:<12}'.format(file_=k)
        cells = '\t'.join(
            ['{:<12}'.format(str(True if j in categories else False)) for j in master[1:]]
        )
        print(out, cells)


master_categories = ['File', 'Keyword1', 'Keyword2', 'Keyword3']
soup = bs(a, 'html.parser')
categories = find_elms(soup, 'div', {'id': 'categories'})
files = find_elms(soup, 'div', {'id': 'file'})
pretty_print(master_categories, categories, files)

输出:

File            Keyword1        Keyword2        Keyword3    
A.jpg        True           True            False       
B.jpg        True           True            False 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

重新格式化和清理带有跨大括号匹配的花括号的CSV文件

如何将HighChart系列重新格式化为CSV导出

将带有任意换行符的文本重新格式化为等长的行

将带有 Excel 日期的列格式化为文本

将数据空间格式化为csv

如何将带有html标记的文本列转换为Excel中的vba中的格式化文本

大熊猫:将CSV数据从单个列重新格式化为多个新列

将数据从CSV重新格式化为JSON,无法在D3中正确解析

将日期重新格式化为YYYY / MM / DD并替换CSV中的列数据

如何将多行的R数据帧重新格式化为一行

如何将 Google 表格中的“矩阵报告”重新格式化为干净的数据表?

如何在python 3.5中将现有数据格式化为csv文件中的列

将带有内嵌音符的歌词格式化为可读的,顶部带有和弦的歌曲

如何将该DF重新格式化为所需的输出?

如何将对象重新格式化为数组Javascript

如何将此表重新格式化为表格?

如何将csv文件中的结果格式化为更像表格的形式

将带有日期的列格式化为特定格式-Excel VBA

如何将数字格式化为带有前导零的字符串?

如何将列表格式化为带有子元组的元组?

Python将数据格式化为csv文件

编写格式化为csv工作表的数据框

Excel在CSV文件中将字符串格式化为日期。如何保留原始字符串值?

如何将20140101重新格式化为有效的日期格式,例如2014-01-01

如何将对象格式化为漂亮的HTML表?

如何将HTML文档格式化为特定的输出?

如何将带后缀的当前日期格式化为上标?

将文本文件重新格式化为CSV格式

如何重新格式化数据集以使其具有特定的结构而没有for循环?