Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python从命令行读取csv文件,并将输出写入output.csv_Python_Csv_Sys - Fatal编程技术网

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

python从命令行读取csv文件,并将输出写入output.csv,python,csv,sys,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

我是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
此代码不提供任何输出。有人能帮我解决这个问题吗?

如果(行[i]!=“0”或行[i]!=“?”):总是正确的,那么您的情况
。假设它是0,那么它肯定不是?因此,
条件之一总是通过。这段代码应该打印行,直到由于其他原因崩溃为止(见下文)。因此,我认为您的第一个问题是您实际上没有调用该方法

接下来,每行递增一次列索引器
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
~/tmp$cat infle.csv
一,二,三
0,4,5
六,七,八
九、十、十一
~/tmp$python test.py infle.csv outfile.csv
转换为
[‘一’、‘二’、‘三’]
[‘九’、‘十’、‘十一’]
~/tmp$cat outfile.csv
一,二,三
九、十、十一

您可以在此处定义一个类。也许你不是故意的,但我没有看到真正的电话。你错过了吗?如果没有,你能分享吗?此外,这样调用sys.argv[1]有点奇怪。你想从控制台上读吗?谢谢你的回答。还有限制字符0或?如果存在,则不应写入输出文件。此外,此代码并没有真正写入输出文件。你能帮帮我吗?它对我有用。您可以
打印('输入文件的输入路径:')
,然后从
sys.argv
获取文件名。也许这些文件根本就没有去你认为应该去的地方。我会用更多的图片更新这个例子。非常感谢。这有帮助!