Python 脚本中的逻辑错误,卡在缩进上[重复]

问题描述 投票:0回答:1

这个脚本的目标很简单:

  • 读入

    .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

早些时候,我让它工作,但最后一个条件,即如果拥有空白/空/空白/空列-消除该行给我带来了麻烦,我不知道该怎么办。

我的解决方案是:

    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

的缩进,但我怀疑这只是一个借口。

确切消息

csv_out.writerow(row)

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

python data-processing
1个回答
0
投票

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

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

的行缩进了 8 个空格,因此无论是

csv_out.writerow
还是
if is underindented
都缩进了。
    

© www.soinside.com 2019 - 2024. All rights reserved.