2017-04-11 54 views
-1

我有兩個文件,其中有兩列如下:了太多的值在Python解壓:由文件格式引起

file 1 
------ 
main 46 
tag 23 
bear 15 
moon 2 

file 2 
------ 
main 20 
rocky 6 
zoo 4 
bear 2 

我想第2行,每行的文件放在一起比較,並在如果有一些詞語是相同的,我將總結這些數字並將它們寫入一個新文件中。

我讀取文件,並使用foreach循環遍歷每一行,但它返回一個ValueError:太多值來解壓縮。

import os 
from itertools import islice 
DIR = r'dir' 
for filename in os.listdir(DIR): 
    with open(os.path.sep.join([DIR, filename]), 'r') as f: 
     for i in range(2): 
      line = f.readline().strip() 
      word, freq = line.split(): 
       print(word) 
       print(count) 

在該文件中,文本的每一行後面都有一個額外的空行。我搜索了\ n;但沒有什麼。 然後我手動刪除它們,然後它工作。

+1

'lines.split()'返回一個列表。因此,當你在for循環中試圖解壓縮兩個變量時,它一次返回一個元素。 – kuro

+0

這些文件是以「word |計數線? –

+0

我怎麼能得到兩個變量? – Raha1986

回答

0

如果你不知道你有多少項目,那麼你不能使用漂亮的解壓設施。你需要拆分並檢查你有多少。例如:

with open(os.path.sep.join([DIR, filename]), 'r') as f: 
    for line in f: 
     data = line.split() 
     if len(data) >= 2: 
      word, count = line[:2] 

這會讓你看到包含至少那麼多行的前兩個字段。由於您未指定如何處理其他行或額外字段,因此我會將其保留(任何其他部分)由您決定。我也忽略了部分以強調現有的代碼;行輸入和拆分將擺脫換行符和空格,但不一定是所有的空格。

+0

的問題的答案,那麼你的意思是什麼是行間的文字是空白? – Raha1986

+0

否;我的意思是你爲了**剝奪每一個論點而付出了額外的麻煩。由於** split **會刪除行中的空格,所以使用** strip **意味着您擔心輸入字符串中存在其他空格。 – Prune

+0

即使使用strip也沒有,我得到相同的錯誤。當我編輯我的問題陳述時,文本行之間有一行。當我手動擦除時,代碼不會返回任何錯誤。 – Raha1986

相關問題