2015-01-03 32 views
2

我有一個文件「TAB.csv」與許多列。我想從csv文件中選擇一個沒有標題的列(該列的索引是3)。然後創建一個新的文本文件「NEW.txt」,並在那裏寫入該列(無標題)。如何從csv中讀取沒有標題的列,並使用Python將輸出保存在txt文件中?

下面的代碼讀取該列,但帶有標題。如何省略標題並將該列保存在新的文本文件中?

import csv 
with open('TAB.csv','rb') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     print row[3] 
+0

你能提供最小的輸入和輸出樣本? – tmrlvi

回答

5

這是@tmrlvi在談論解決方案:它跳過通過下一個函數的第一行(標題):

import csv 

with open('TAB.csv','rb') as input_file: 
    reader = csv.reader(input_file) 
    output_file = open('output.csv','w') 
    next(reader, None) 

    for row in reader: 
     row_str = row[3] 
     output_file.write(row_str + '\n') 

    output_file.close() 
+1

reader = csv.reader(input_file) output_file = open('NEW.txt','w') 運行良好以及:)謝謝 – zone1

+0

謝謝@ zone1,將解決它! – avenet

3

enumerate是一個很好的函數,它返回一個元組。它使得能夠在遍歷迭代器時查看索引。

import csv 
with open('NEW.txt','wb') as outfile: 
    with open('TAB.csv','rb') as f: 
     reader = csv.reader(f) 
     for index, row in enumerate(reader): 
      if index > 0: 
       outfile.write(row[3]) 
       outfile.write("\n") 

另一種解決方案是從文件中讀取一行(以跳過標題)。

+0

這裏輸出寫入一行。我需要得到一列數字,與在csv filer中一樣。 – zone1

+2

如果輸出寫入一行,用'\ r \ n''替換''\ n''(你可能在windows中工作)。您可以將它與更優雅的@avenet解決方案結合使用。無論如何,這段代碼應該跳過標題。 (它不寫第一行) – tmrlvi

+0

是的,我在Windows上工作,'\ r \ n'解決方案解決了一個問題,現在沒有頭文件。謝謝! – zone1

6

試試這個:

import csv 

with open('TAB.csv', 'rb') as f, open('out.txt', 'wb') as g: 
    reader = csv.reader(f) 
    reader.next()   # skip header 
    g.writelines(row[3] + '\n' for row in reader) 
+1

優雅的答案。很好地使用嵌套的上下文管理器。 – ksindi

相關問題