2010-07-09 67 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()+