Ваше условие if (row[i]!="0" or row[i] != "?"):
всегда верно. Предположим, что это 0, тогда это точно не ? поэтому одно из условий or
всегда выполняется. Этот код должен печатать строки до тех пор, пока не произойдет сбой по другим причинам (см. ниже). Итак, я думаю, что ваша первая проблема заключается в том, что вы на самом деле не вызываете метод.
Затем вы увеличиваете индексатор столбца i
один раз на строку, поэтому он будет считывать ячейку 0 в первой строке, ячейку 1 во второй строке, ... и в конечном итоге вы получите ошибку индекса, когда i
становится больше, чем количество столбцы. На самом деле он не делает то, что вы хотите, он проверяет только одну ячейку в строке.
Вы можете использовать заданные пересечения, чтобы узнать, находится ли запрещенный символ в какой-либо из ячеек. Мне не ясно, должна ли ячейка точно соответствовать одному из запрещенных символов или нет, поэтому я написал этот пример, чтобы найти любое вхождение в строке, присоединив строку к одной строке для проверки.
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
person
tdelaney
schedule
05.03.2017