2014-11-06 35 views
1

我想將包含製表符分隔列表單詞的文件拆分爲一個「list」,其中前面有一個數字。用python將文件拆分成帶有計數器的新行

因此,如果輸入的文件包含此(其中單詞之間的空格是一個標籤): 樹屋車毯

我想這樣的輸出:

1 tree 
2 car 
3 house 
4 blanket 

我這有代碼的工作,打印出來的「單詞列表」,但不知道如何獲取計數器在前面的話:

#!/usr/bin/env python 

import csv 

with open ("commonwords.tsv") as file: 
    for line in file: 
    print line.replace("\t","\n") 

感謝

回答

1

您可以使用enumerate

import csv 
with open("commonwords.tsv") as f: 
    for line in f: 
     line = line.replace("\t", "\n") 
     for ind, word in enumerate(line.split(), 1): 
      print "{0} {1}".format(ind, word) 
1 tree 
2 car 
3 house 
4 blanket 

不知道,如果你想計數重置每行或延續至年底:

with open("commonwords.tsv") as f: 
    line = f.read().replace("\t", "\n") 
    for ind, word in enumerate(line.split(), 1): 
     print "{0} {1}".format(ind, word) 

你也可以拆分無需更換:

with open("commonwords.tsv") as f: 
    lines = f.read().split() 
    for ind, word in enumerate(lines, 1): 
     print "{0} {1}".format(ind, word) 
+0

不會給每個單詞一個數字。 – tdelaney 2014-11-06 01:38:29

+0

另外,得到這個錯誤 - 值錯誤:格式爲零的長度字段名。你知道爲什麼會出現這個錯誤嗎?謝謝 – Jazzmine 2014-11-06 01:45:35

+0

@Jazzmine,現在就試試吧,您必須使用python的舊版本 – 2014-11-06 01:46:36

0
import csv 
import itertools 

with open('commonwords.tsv') as infile, open('/path/to/output', 'w') as outfile: 
    writer = csv.writer(outfile, delimiter='\t') 
    count = itertools.count(1) 
    for row in csv.reader(infile, delimiter'\t'): 
     for word in row: 
      writer.writerow([next(count), word]) 
+0

您好inspectorG4dget,感謝您的回覆如此之快。我在第4行的infile和open之間出現逗號錯誤:語法錯誤:語法無效。你能測試這個嗎? – Jazzmine 2014-11-06 01:38:54

+0

@Jazzmine這個語法適用於Python 2.7及以上版本。我相信你用2.6嗎? – MattDMo 2014-11-06 02:31:16

1

枚舉函數可以計數這些詞給你,但你需要一個迭代器或一個單詞列表,而不僅僅是文件的行。這是一個生成器,它經歷一個csv文件的行並單獨輸出每列。它通過枚舉來獲得結果。

import csv 

def yield_col(reader): 
    for row in reader: 
     for item in row: 
      yield item 

with open ("commonwords.tsv") as fp: 
    reader = csv.reader(fp, dialect='excel-tab') 
    for num, word in enumerate(yield_col(reader), 1): 
     print num, word 
+0

該解決方案也可以。我在早些時候提供了他的答案時給了Padraic綠色複選標記,不過謝謝你提供了這個。 – Jazzmine 2014-11-06 02:00:35