【问题标题】:Transposing datasets with multiple rows in a file into a single row per dataset将文件中具有多行的数据集转置为每个数据集的单行
【发布时间】:2012-03-18 18:28:00
【问题描述】:

能否请我指点一些网站,让我可以阅读并获得编写 python 代码的技能来执行以下操作?

到目前为止,我只能找到将结构化数据读入列表和字典的 python 代码。我需要看一个带有行处理的示例,以将多行数据合并到一行。

问题

我在一个文件中有数据集,每个数据集都包含在{} 中,每行一个项目。

我需要将一个数据集的所有项目转置为一行,即转置为表格> 下面是一个例子

输入文件:

details_book1{
title,txt, book_book1

author,txt,author_book1

price,txt, price_book1 }



details_book2

{

title,txt, book_book2

author,txt,author_book2

price,txt, price_book2 
}

需要输出:

details_book1,book_book1,author_book1,price_book1
details_book2,book_book2,author_book2,price_book2
...
details_bookn,book_bookn,author_bookn,price_bookn

【问题讨论】:

    标签: python


    【解决方案1】:

    对不起,我不知道具体的参考资料,除了学习字符串和列表操作,python 文档还不错,但它可能像这样简单:

    lines = [line for line in a.split('\n') if line]
    
    books = []
    book = ''
    for line in lines:
        if '}' in line:
            book += ',' + line
            book = book.replace('{', ' ').replace('}', ' ')
            books.append([x.strip() for x in book.split(',') if x.strip()])
            book = ''
        else:
            book += line + ','
    

    这将创建一个实体列表,您可以遍历该列表,将所有元素提取到变量中:

    for book, title, a, bookbook, author, b, authorbook, price, c, pricebook in books:
        print '%s,%s,%s,%s' % (book, bookbook, authorbook, pricebook)
    
    # result
    details_book1,book_book1,author_book1,price_book1
    details_book2,book_book2,author_book2,price_book2
    

    不过,这可能会在某些方面失败,并且要求您的数据与您目前所显示的内容相匹配。特别是,如果您在任何文本中都有逗号,我在第二个列表理解中围绕逗号拆分 book 变量将拆分为太多字段,并且稍后在 for 循环中解包(最后一个示例代码 sn-p)会失败。

    另外,如果一个块与前一个块的 } 在同一行开始,它将无法正确切割数据。有一些方法可以解决这个问题,但我想让事情变得非常简单。

    也许这可以作为一个起点。

    我想你也可以这样做:

    import re
    for book in re.findall('\w.*?{.*?}', a, flags=re.M|re.S):
        book = book.replace('\n',',').replace('{',',').replace('}',',')
        book = [x.strip() for x in book.split(',') if x.strip()]
        print book
    

    这通过 re.findall 使用正则表达式来查找后跟任意数量的空格的所有单词,以及大括号之间的任何内容(非贪婪)。这会导致换行符和逗号丢失,所以我用逗号替换换行符和大括号,然后使用列表推导来拆分逗号,去除每个拆分元素周围的空格,并忽略任何空字符串。

    这会在书中每次出现这些列表:

    ['details_book1', 'title', 'txt', 'book_book1', 'author', 'txt', 'author_book1', 'price', 'txt', 'price_book1']
    ['details_book2', 'title', 'txt', 'book_book2', 'author', 'txt', 'author_book2', 'price', 'txt', 'price_book2']
    

    再一次,如果书名或 txt 简介中包含逗号,则用逗号分隔是一个问题(但如果有,我不知道您如何区分逗号分隔位之外的这些简介每一行)。

    【讨论】:

      猜你喜欢
      • 2015-01-08
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 2019-06-27
      • 1970-01-01
      相关资源
      最近更新 更多