2016-12-27 5 views
0

ファイルをcsvに書き込んでいますが、リストインデックスが範囲外です。ここに私のコードです。 85個のファイルがあるディレクトリがあります。リストのインデックスがpythonで範囲外になっています。ファイルをcsvに書き出します。

import os 
import os.path 
import csv 
import re 
import calendar 
path = 'C:\\Users\\akhilpriyatam.k\\Desktop\\xls' 
text_files = [os.path.splitext(f)[0] for f in os.listdir(path)] 
for v in text_files: 
    os.chdir('C:\\Users\\akhilpriyatam.k\\Desktop\\xls') 
with open('file1.csv', 'wb') as csvfile: 
    thedatawriter = csv.writer(csvfile,delimiter=',') 
    for v in text_files: 
     months = list(calendar.month_name[1:]) 
     regex = re.compile('|'.join(months)) 
     iter = re.finditer(regex, v) 
     if iter: 
      idx = [i for i in iter][0].start() 
      filename, timestamp = v[:idx],v[idx:-4] 
      print filename, timestamp 
      thedatawriter.writerow([filename,timestamp]) 

ここはエラーです。

IndexError         Traceback (most recent call last) 
<ipython-input-145-0b1c3f1407ed> in <module>() 
    15   iter = re.finditer(regex, v) 
    16   if iter: 
---> 17    idx = [i for i in iter][0].start() 
    18    filename, timestamp = v[:idx],v[idx:-4] 
    19    print filename, timestamp 

IndexError: list index out of range 
+0

** FULL **エラーメッセージ(トレースバック) - 多くの有用な情報があります。 のどの行問題など – furas

+0

はIndexErrorトレースバック(最新の呼び出しの最後) を作る() 15 ITER = re.finditer(正規表現、V) 16 ITERの場合: - タイムスタンプ= v [:idx]、v [idx:-4] 19プリントファイル名、タイムスタンプ IndexError:リストインデックス範囲外である –

+0

は、問題の 'Traceback'を追加します。読みやすくなり、誰もがそれを読むでしょう。 – furas

答えて

2

finditer()イテレータを返し、それは常にtruthyです:つまり

In [1]: import re 

In [2]: iter = re.finditer(r'[0-9]+', 'no digits here') 

In [3]: bool(iter) 
Out[3]: True 

は、if iter:チェックは常に渡す - 一致がない場合でも。そして、一致がないときは、[i for i in iter][0]の空リストの最初の要素にアクセスしながら、IndexErrorを取得しています。

+0

申し訳ありませんが、コード内でfinditer()を使用する方法をよく理解していません。 –

+0

@Akhil Kodicherlaイテレータはテスト条件として使用しないでください。常にTrueを返します。 –

1
iter = re.finditer(regex, v) 
     if iter: 

反復子はテスト条件として使用しないでください。常に、Trueを返します。あなたがあなたのコードを変更する必要があり

iter = re.findall(regex, v) 
      if iter: 

findallは、テスト条件として使用することができますリストを返します。

関連する問題