python脚本中的逻辑错误,卡在缩进上

时间:2016-02-01 21:47:27

标签: python data-processing

此脚本的目标很简单:

  • 读入.csv文件

  • 删除转义字符&的实例,并将其替换为&

  • 消除所有不符合以下条件的行:

    • 验证这些行以确保它们没有或多于或少于必要的柱状值

    • 如果在空白/空/空白/空列上占有 - 消除该行

代码如下所示:

import csv

num_headers = 9
starts = 1

def url_escaper(data):
  for line in data:
    yield line.replace('&','&')

with open("adzuna_input.csv", 'r') as file_in, open("adzuna_output.csv", 'w') as file_out:
    csv_in = csv.reader(url_escaper(file_in))
    csv_out = csv.writer(file_out)

    for i, row in enumerate(csv_in, starts):

        counter = 1
        if len(row) == num_headers:
            for element in row:
                if element.strip():
                    counter += 1
            if counter == num_headers:
                    csv_out.writerow(row)


        else:
            print "line %d is malformed" % i

之前,我有它工作,但最后一个条件,即如果在空白/ null /空格/空列上 - 如果消除了那行给我带来麻烦,我不知道怎么办呢。

我的解决方案是

    for i, row in enumerate(csv_in, starts):

        counter = 1
        if len(row) == num_headers:
            for element in row:
                if element.strip():
                    counter += 1

计算行,查看值,尝试strip它们作为一种方式来访问该字段是否包含一些有用的信息,即字符串/ int /某些文本。

然而这不起作用。

我得到的确切错误消息是关于csv_out.writerow(row)的缩进,但我怀疑这只是一个借口。

确切消息

File validator.py, 
line 23 csv_out.writerow(row) 
               ^
IndentationError: expected an indented block

我想知道为什么上面的程序没有执行。

1 个答案:

答案 0 :(得分:1)

您实际上需要正确格式化代码:

        for element in row:
            if element.strip():
                counter += 1
        if counter == num_headers:
                csv_out.writerow(row)

带有csv_out.writerow的行缩进了8个空格,因此if is underindentedcsv_out.writerow是否过度缩进。