2010-07-09 73 views
1

我使用此代码来拆分数据以制作一个包含三个子列表的列表。有*或 - 时分割为 。但它也读取\ n \ n * ..不知道为什么? 我不想读这些?有人可以告诉我我做错了什么吗? 这是数据列表和子列表

*日 - 教育的报价是听任何话都不动怒或丧失你的自信能力 - 弗罗斯特 - 教育是经历了学习和保留下来的东西忘记了 - BF Skinner *当天事实 - 分形是混沌理论的重要组成部分,对研究大量的领域非常有用。它们存在于整个大自然中,因此可用于帮助预测自然界中的许多事物。他们还可以帮助模拟自然,如电影的图形设计(动画云等),或预测自然的行为。根据Just-Eat最近的一项调查,并不是英国的每个人都知道苏格兰的美味,haggis是什么。在英国接受调查的1,623人中:18%的英国人认为哈吉斯是某种苏格兰动物。15%的人认为这是一种苏格兰乐器。4%的人认为它是\ n \ n * 41%甚至不知道苏格兰的民族菜是什么。\ n \ n虽然少数苏格兰人承认不知道什么是哈吉斯,但他们还发现苏格兰人中有68%会喜欢看哈吉斯作为外卖交付。 - 随着涉及Facebook及其不断更新的隐私设置越来越多的担忧,一些软件开发人员现在已经设计了一个网站,允许用户浏览没有正确隐私设置的人的状态更新以防止它。\ n \ n名为Openbook,该网站的最终目的是进一步向公众披露Facebook及其隐私设置的问题,并向人们展示访问关于完全陌生人的此类信息是多么容易。该网站用作搜索引擎,因此很容易搜索诸如“不要告诉任何人”或“我讨厌我的老板”等词语,搜索也可以按性别缩小。 *每日宠物 -Scottish梗 -Land鲨鱼 -Hamster -Tse谢飞 END

我用这个代码:

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

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

,以使该错误类似于我有什么获取列表

+0

你是什么意思?“它也读取\ n \ n *”?它是数据的一部分,为什么不能读入数据呢? – 2010-07-09 20:22:58

+0

你看到数据是如何张贴在网站上的,现在不是真正的数据。它也有\ n \ n *在里面。听到你看到它那样的节目。但是当我读到它时,它会打印出我\ n \ n * 如果你收到它 – babikar 2010-07-09 21:23:34

+0

它会打印出来! – babikar 2010-07-09 21:28:51

回答

2

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

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

见条()文档:http://docs.python.org/library/stdtypes.html#str.strip

已更新来自备注:

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

nope,'strip()'不会这样做!我也开始感到困惑,但仔细观察 - 文件中有'\'和'n'的序列: '英国人民调查:英国人的18%' – 2010-07-09 21:42:45

+0

如果由于某种原因,您的输入数据是奇怪地逃脱,你实际上有'\'后面跟着'n',然后就是: finallist = [item.replace(“\\ n”,“\ n”)。strip()for newlist] – sunetos 2010-07-09 22:47:20

1

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

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()函数发生了什么。

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\nr'\n\n')。单行表达式是列表理解,一种构建列表的方法,不用多个.append()+