python从命令行读取csv文件并将输出写入output.csv
我是python的新手,正在尝试读取csv输入和输出文件,按每行扫描输入文件,并仅将那些行写入输出没有任何特殊字符的文件,如'?'或'0'。以下是我的代码:python从命令行读取csv文件并将输出写入output.csv
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
此代码不会给出任何输出。有人能帮我解决吗?
您的状态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
谢谢你的回答。还有限制字符0或?如果不存在,则不应写入输出文件。而且,这段代码并不真正写入输出文件。你能帮我解决吗? – user6622569
它适合我。你打印('输入文件的输入路径''),然后从'sys.argv'中获取你的文件名。也许这些文件不会在你认为他们应该做的地方。我会用更多的印刷品来更新这个例子。 – tdelaney
非常感谢。这有帮助! – user6622569
您在此处定义一个类。也许你不是故意的,但我没有看到实际的电话。你错过了吗?如果不是,你可以分享吗?此外,有点奇怪,像这样调用sys.argv [1]。你是否想要从控制台读取它? –