Python csv用引号跳过字段

时间:2015-04-27 16:43:09

标签: python csv elastic-map-reduce

尝试使用mapreduce和python在AWS上使用大数据进行练习。

我有代码

    import sys
    import re
    import csv
    import glob
    import string

    #class MyDialect(csv.Dialect):
        #strict = True
        #skipinitialspace = False
        #quoting = QUOTE_MINIMAL
        #delimiter = ','
        #quotechar = '"'

    for line in sys.stdin:
        csv.reader(line, dialect='excel')
        #reader = csv.reader(line, delimiter=',', quoting=csv.QUOTE_ALL,  quotechar='"')
        #line = line.strip()
        #unpacked = line.split(",")
        try:
        #regular expresion 
          num,title,year,length,budget,rating,votes,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,mpaa,Action,Animation,Comedy,Drama,Documentary,Romance,Short = line.split(",")
          if float(rating) <= 1:
            results = [votes, rating, title, year]
            print("\t".join(results))
        except ValueError:
          pass

现在我知道这不是完美的输出行值,但每当我尝试使用csv就行了。

&lt; _csv.reader对象位于0x7fc2c184e280&gt;

我所有的台词。

我需要将输入作为一行输出,并将输出输出到标准输出,因为这是一个处理数据并将其传递给reducer的节点。我已经解决了大部分错误,但它不接受带有逗号的标题。所以“布莱尔女巫,”将被跳过,而不会显示在列表中,因为我认为预算成为评级和评级。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:0)

csv.reader将打开的文件作为其参数,并返回一个读取器对象,该对象将迭代给定csvfile中的行。由于您没有处理csv.reader的返回值,它将打印您看到的行。因此,如果要使用此模块,则需要使用变量来存储阅读器,然后迭代使用该阅读器对象;如果要手动解析文件,则只需删除该行。有关详细信息,请参阅文档:https://docs.python.org/2/library/csv.html

答案 1 :(得分:-1)

好的找到了做这一切的简单方法。如果您是管理员,您可以控制数据,而不是做&#34;,&#34;作为分隔符,使用制表符,你就不会在任何地方遇到逗号问题。除非有大量文本,否则大多数数据库信息都没有标签。

了解您的数据,同时围绕数据运行程序。

相关问题