python从命令行读取csv文件并将输出写入output.csv

时间:2017-03-05 18:11:15

标签: python csv sys

我是python的新手,我正在尝试读取csv输入和输出文件,每行扫描输入文件,并只将那些行写入输出文件,这些行不具有任何特殊字符,如'?'或'0'。以下是我的代码:

import csv
import sys
class PreProcessDataSet:
    def preProcessData(self) :
        print ('Enter the input path of the file : ')
        inputFile = open(sys.argv[1], 'rb')
        outputFile = open(sys.argv[2],'wb')
        writer = csv.writer(outputFile)
        i = 0
        for row in csv.reader(inputFile):
            if (row[i]!="0" or row[i] != "?"):
                writer.writerow(row)
                i=i+1
                print row

此代码不提供任何输出。有人可以帮我解决一下吗?

1 个答案:

答案 0 :(得分:0)

您的条件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