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

l7mqbcuq  于 2022-12-06  发布在  Python
关注(0)|答案(1)|浏览(105)

我是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

这段代码给予任何输出。有人能帮我吗?

mwkjh3gx

mwkjh3gx1#

你的条件if (row[i]!="0" or row[i] != "?"):总是true。假设它是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

相关问题