2017-11-09 21 views
0

私は多数の列を持つcsvファイルを持っていて、いくつかの列は他の列より多くの行を持っています。私は特定の列を読み込み、それらの列を別のcsvファイルに抽出しようとしています。しかし、私が読んでいる列は、csvファイルの他の列よりも短いため、リストの索引が範囲外になっています。CSVファイルを読み取るとリストインデックスが範囲外になる

import csv 
import os 
import os.path 

'Open csv directory to extract data from' 
path = 'S://Raw Data/VehicleData/'    

'Get file names and print number of files in the directory' 
files = [f for f in os.listdir(path)] 
print(files) 
print(len(files)) 

'Start loop to scan through files in directory' 
for j in range(len(files)): 

'determine name of file and the output name of the file' 
name = files[j] 
print(name) 

'path to file to open' 
fpath = os.path.join(path, files[j]) 

    if files[j].endswith(".csv"): 
     nameout = 'VehicleN3STPData' + '.csv' 
     with open (fpath, 'r', newline='') as csvfile: 
      testcsv = csv.reader(csvfile,delimiter=',') 
      with open (nameout,'a+',newline='') as outfile: 
       writer = csv.writer(outfile) 
       for row in testcsv: 
        my_row = [] 
        my_row.append(row[59]) 
        my_row.append(row[111]) 
        my_row.append(row[120]) 
        print(my_row) 
        writer.writerow(my_row) 
       outfile.close()  
     csvfile.close() 

答えて

1

あなたは長さをチェックするために条件文を必要とするか、あなたの意図した動作に応じて、except節試し&を必要としています。

ここでは、列の値が存在しない場合は空白として保持する条件文を使用する例を示します。

の代わりに:

my_row.append(row[59]) 
my_row.append(row[111]) 
my_row.append(row[120]) 

の操作を行います。あなたの助けを

for col_num in [59, 111, 120]: 
    my_row.append(row[col_num] if len(row) > col_num else '') 
0

おかげで、ここにあなたの条件文を使用して、isliceとのヘッダを削除し、その後、削除、働いていた最終的なコードです空白行があれば(my_row)ありがとう!

if files[j].endswith(".csv"): 
    nameout = 'VehicleN3STPData' + '.csv' 
    with open (fpath, 'r', newline='') as csvfile: 
     testcsv = csv.reader(csvfile,delimiter=',') 
     with open (nameout,'a+',newline='') as outfile: 
      writer = csv.writer(outfile) 
      for row in islice(testcsv,3,None): 
        my_row = [] 
        for col_num in [59,111,120]: 
         my_row.append(row[col_num] if len(row) > col_num else '') 
        if any(my_row): 
         writer.writerow(my_row) 
      outfile.close()  
    csvfile.close()enter code here 
関連する問題