条件if (row[i]!="0" or row[i] != "?"):
は常にtrueです。それが0であるとすれば、確かにそうではありませんか? or
のいずれかの条件が常に成立します。このコードは、他の理由でクラッシュするまで行を出力します(下記参照)。だから、あなたの最初の問題は、あなたが実際にメソッドを呼び出さないということです。
次に、行インデクサーi
を1行につき1つインクリメントしているため、1行目のセル0、2行目のセル1が読み込まれ、最終的にi
が大きくなるとインデックスエラーが発生します。列の数よりも多い。あなたが望むものを実際にやっているわけではなく、行ごとに1つのセルしかチェックしていません。
制限交差文字を使用して、制限された文字がいずれかのセルに含まれているかどうかを調べることができます。そのセルが制限された文字のいずれかと正確に等しくなければならないかどうかは私にはっきりしていないので、この例を書いて、その行を検査のための単一の文字列に結合することによって、
import csv
import sys
class PreProcessDataSet:
def preProcessData(self) :
special_chars = set('?0')
# Don't tease the user with prompts that don't work!
# print ('Enter the input path of the file : ')
inputFile = open(sys.argv[1], 'rb')
outputFile = open(sys.argv[2],'wb')
print "Converting", inputFile, "to", outputFile
writer = csv.writer(outputFile)
for row in csv.reader(inputFile):
if not set(''.join(row)) & special_chars:
writer.writerow(row)
print row
obj = PreProcessDataSet()
obj.preProcessData()
サンプル実行:あなたがここにクラスを定義
~/tmp $ cat infile.csv
one,two,three
0,four,five
six?,seven,eight
nine,ten,eleven
~/tmp $ python test.py infile.csv outfile.csv
Converting <open file 'infile.csv', mode 'rb' at 0x7f9d4d0165d0> to <open file 'outfile.csv', mode 'wb' at 0x7f9d4d016660>
['one', 'two', 'three']
['nine', 'ten', 'eleven']
~/tmp $ cat outfile.csv
one,two,three
nine,ten,eleven
。たぶんあなたには意味しなかったかもしれませんが、私は実際の呼び出しを見ていません。あなたはそれを見逃していますか?そうでない場合は、共有することはできますか? さらに、sys.argv [1]のように呼び出すのはちょっと変です。あなたはそれをコンソールから読むことを意味しましたか? –