2016-10-07 5 views
0

別のスキップ列に書き込むPythonはCSVファイルを読み、私は18列I列4以外の入力からすべての列を持つ新しいCSVファイルを作成する必要があり と5とのCSV入力ファイルを持っている

My機能は今

のように見えます
def modify_csv_report(input_csv, output_csv): 
    begin = 0 
    end = 3 

    with open(input_csv, "r") as file_in: 
     with open(output_csv, "w") as file_out: 
      writer = csv.writer(file_out) 
      for row in csv.reader(file_in): 
       writer.writerow(row[begin:end]) 
    return output_csv 

だから、読み込みと書き込みの列番号0から3を、私はあなたがをスライスを使用して行の他の部分を追加することができますどのように列4,5をスキップして、そこ

答えて

0

をこれが何をしたいです:

import csv 


def remove_csv_columns(input_csv, output_csv, exclude_column_indices): 
    with open(input_csv) as file_in, open(output_csv, 'w') as file_out: 
     reader = csv.reader(file_in) 
     writer = csv.writer(file_out) 
     writer.writerows(
      [col for idx, col in enumerate(row) 
      if idx not in exclude_column_indices] 
      for row in reader) 

remove_csv_columns('in.csv', 'out.csv', (3, 4)) 
2

から続けるかわかりませんあなたが最初の部分で行ったように、:3列が含まれるように、最初のスライスの停止インデックスは4指定開始インデックス0にしてください

writer.writerow(row[:4] + row[6:]) 

注意も必要通常ではありません。

より一般的なアプローチは、リスト内包enumerate採用します:

exclude = (4, 5) 
writer.writerow([r for i, r in enumerate(row) if i not in exclude]) 
1

あなたのCSVが意味のあるヘッダあなたをスライスへの代替ソリューションを持っている場合インデックスごとに行を並べ替えるには、DictReaderDictWriterクラスを使用します。

#!/usr/bin/env python 
from csv import DictReader, DictWriter 

data = '''A,B,C 
1,2,3 
4,5,6 
6,7,8''' 

reader = DictReader(data.split('\n')) 

# You'll need your fieldnames first in a list to ensure order 
fieldnames = ['A', 'C'] 
# We'll also use a set for efficient lookup 
fieldnames_set = set(fieldnames) 

with open('outfile.csv', 'w') as outfile: 
    writer = DictWriter(outfile, fieldnames) 
    writer.writeheader() 
    for row in reader: 
     # Use a dictionary comprehension to iterate over the key, value pairs 
     # discarding those pairs whose key is not in the set 
     filtered_row = dict(
      (k, v) for k, v in row.iteritems() if k in fieldnames_set 
     ) 
     writer.writerow(filtered_row) 
関連する問題