您的狀態if (row[i]!="0" or row[i] != "?"):
始終爲真。假設它是0,那麼它肯定不是?所以or
條件之一總是通過。這段代碼應該打印行,直到出現其他原因崩潰(見下文)。所以,我認爲你的第一個問題是你實際上沒有調用這個方法。
接下來,您每行增加一列索引器i
一次,因此它將讀取第一行的單元格0,第二行的單元格1 ......並且最終當i
變大時,您將收到索引錯誤比列的數量。它並沒有真正做到你想要的,它只檢查每行一個單元。
您可以使用set交集來確定受限字符是否在任何單元格中。我不清楚單元格是否必須完全等於其中一個限制字符,所以我編寫了這個示例,通過將行連接到單個字符串進行檢查來查找行中的任何事件。
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]。你是否想要從控制檯讀取它? –