2014-10-29 175 views
-2

我想從我的代碼下面寫一些輸出到csv。第一列應該包含所有有效的ID,其頭部標題爲「有效(在括號內計數)」。第二列應包含所有無效ID的列表,並具有一個標題爲「無效(在括號中計數)」。任何想法我如何做到這一點?寫入CSV文件

import csv 

# csv_path = r'C:\temp\data\fileA' 
csv_path = r'C:\temp\data\fileA' 
reader = csv.reader(open(csv_path, 'r'), dialect='excel-tab') 
reader.next() # ignore heading 
min_id = 1503332138 
max_id = 1503632138 
valid_ids = [] 
invalid = [] 
x = 0 
for line in reader: 
    pv = line[1] 
    if id.isdigit() and int(id) >= min_id and int(id) <= max_id: 
     if id not in valid_ids: 
      valid_ids.append(id) 
    else: 
     if id not in invalid: 
      invalid.append(id) 
print 'Valid IDs (',len(valid_ids),')' 
for valid in valid_ids: 
    print valid 
print 'Invalid IDs (',len(invalid),')' 
for invalid in invalid: 
    print invalid 
+4

表現出一定的樣品的輸入和所希望的輸出,使用要面臨的問題一起。 – fedorqui 2014-10-29 10:45:44

回答

0
# ... 
# Continuing from point where you have valid_ids and invalid lists populated 

data = [('Valid IDs', valid_ids), ('Invalid IDs', invalid)] 

# Create header 

header = [] 
for (label, id_list) in data: 
    label_with_count = '%s (%d)' % (label, len(id_list)) 
    header.append(label_with_count) 

# Write to CSV file 

with open('path_to_output_file.csv') as out_csv_file: 
    csv_writer = csv.writer(out_csv_file) 

    csv_writer.writerow(header) 

    for (idx, dataset) in enumerate(data): 
     (label, id_list) = dataset 
     for id in id_list: 
      row = (idx * ['']) + [id] + ((len(data) - idx - 1) * ['']) 
      csv_writer.writerow(row)