line
withinのインデックスが必要ですthefile
。それができたら、あとは簡単です。そして、それを取得する方法はenumerateを使用することです。
def CleanFile(sourceFile):
global thefile
thefile=list(csv.reader(open(sourceFile, 'rb'), delimiter=',', quotechar='"'))
for i, line in enumerate(thefile):
if line[3]=='':
del thefile[i]
ただし、実際に削除する必要があるかどうかを尋ねる価値があります。たとえば、このようにフィルタリングできますか?
def CleanFile(sourceFile):
global thefile
thefile=[line for line in
csv.reader(open(sourceFile, 'rb'), delimiter=',', quotechar='"'))
if line[3] != '']
line[3] == ''
または、データで何をしているかによっては、出力時または計算時に行をスキップする方が理にかなっているかもしれません。または、そもそもリストを作成しない方がよいでしょう。csv.reader をイテレータのままにしておくだけです。その後itertools.ifilter
、 、またはジェネレータ式を介してその前にフィルタを貼り付けることができます。実際、これは 2 つの文字を変更するだけの簡単なものです。
def CleanFile(sourceFile):
global thefile
thefile=(line for line in
csv.reader(open(sourceFile, 'rb'), delimiter=',', quotechar='"'))
if line[3] != '')
もちろん、たとえば へのランダムアクセスが必要な場合、これは意味がありませんthefile
。しかし、行ごとに繰り返す場合は、これがおそらく最良の解決策です。(それはグローバルであってはならないことを除いてthefile
、必要に応じて関数から関数へ渡されるべきです。)