将文件中包含多行的数据集转换为每个数据集的单行

时间:2012-03-18 18:28:00

标签: python

我可以请一些指向我可以阅读的网站并获得编写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

1 个答案:

答案 0 :(得分:0)

对不起我不知道特别的引用,除了学习字符串和列表操作之外,python文档也不是太糟糕,但它可能就像这样简单:< / p>

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

但是,这可能会在某些方面失败,并且要求您的数据与您目前所显示的数据相匹配。特别是,如果你在任何一个文本中都有逗号,那么我将第二个列表中的逗号分开的书变量将被分解为太多的字段,而for循环中的解包(最后一个示例代码片段)将会失败

此外,如果一个块与前一个块的同一行开始,则无法正确地切断数据。有很多方法,但我想保持简单。

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

我想你也可以这样做:

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 blurbs这样的东西都有逗号(或者如果它们有,我不知道除了逗号分隔的位之外你怎么能分辨出这些简介)在每一行)。