列表和子列表

时间:2010-07-09 20:16:58

标签: python

我使用此代码拆分数据以生成包含三个子列表的列表。 有*或 - 时分开。但它也读到了\ n \ n * ..不知道为什么? 我不想读那些?谁能告诉我我做错了什么? 这是数据

*每日报价 - 教育是能够倾听几乎任何事情而不会发脾气或自信 - 罗伯特弗罗斯特 - 当被学习的东西被遗忘时,教育是幸存的--B。F. Skinner *每日事实 -Fractals是混沌理论的重要组成部分,在研究大量领域时非常有用。它们存在于整个自然界中,因此可用于帮助预测自然界中的许多事物。它们还可以帮助模拟自然,如电影的图形设计(动画云等),或预测自然的行为。 - 根据Just-Eat最近的一项调查,并不是英国的每个人都知道苏格兰人的美味,哈吉斯是什么。在接受调查的1,623名英国人中:\ n \ n * 18%的英国人认为哈吉斯是某种苏格兰动物。\ n \ n * 15%的人认为这是一种苏格兰乐器。\ n \ n * 4%的人认为它是来自哈利波特的一个角色。\ n \ n * 41%的人甚至不知道苏格兰的国菜是什么。\ n \ n虽然少数苏格兰人承认不知道哈吉斯是什么,但他们也发现68%的苏格兰人会喜欢看到Haggis作为外卖。 - 随着Facebook越来越多的担忧及其不断变化的隐私设置,一些软件开发人员现在设计了一个网站,允许用户浏览没有正确隐私设置的任何人的状态更新,以防止它。\ n \ nNamed Openbook,该网站的最终目标是进一步向公众公开Facebook及其隐私设置的问题,并向人们展示访问有关完全陌生人的此类信息是多么容易。该网站作为搜索引擎工作,因此很容易搜索“不要告诉任何人”或“我讨厌我的老板”等术语,搜索也可以按性别缩小。 *每日宠物 - 苏格兰梗 - 鲨鱼 -仓鼠 - 谢谢飞 结束

我使用此代码:

contents = open("data.dat").read()
data = contents.split('*') #split the data at the '*'

newlist = [item.split("-") for item in data if item]

使错误类似于我必须得到的列表

4 个答案:

答案 0 :(得分:2)

“\ n \ n”是输入数据的一部分,因此它保存在python中。只需添加一个strip()即可将其删除:

finallist = [item.strip() for item in newlist]

请参阅strip()文档:http://docs.python.org/library/stdtypes.html#str.strip

评论更新:

finallist = [item.replace("\\n", "\n").strip() for item in newlist]

答案 1 :(得分:1)

open(“data.dat”)。read() - 读取文件中的所有符号,而不仅仅是你想要的符号。 如果你不需要'\ n',你可以尝试content.replace(“\ n”,“”)或读取行(不是整个内容),并截断每行的最后一个符号'\ n'。

答案 2 :(得分:0)

这将拆分文本中的任何星号。

更好的实施方式是做:

lines = []

for line in open("data.dat"):
    if line.lstrip.startswith("*"):
        lines.append([line.strip()])  # append a list with your line
    elif line.lstrip.startswith("-"):
        lines[-1].append(line.strip())

要获得更多家庭作业,请研究以这种方式使用open()函数时发生的事情。

答案 3 :(得分:0)

以下解决了我的问题:

result = [  [subitem.replace(r'\n\n', '\n') for subitem in item.split('\n-')]
            for item in open('data.txt').read().split('\n*')  ]

# now let's pretty print the result
for i in result:
    print '***', i[0], '***'
    for j in i[1:]:
        print '\t--', j
    print

注意我在新行+ *-上拆分,这样就不会在文本内部的短划线上拆分。另外,我用新的换行符\替换文字字符序列n \ n r'\n\n''\n')。单线表达式是列表理解,一种在一个gulp中构建列表的方法,没有多个.append()+