这个脚本的目标很简单:
读入
.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)
我想知道为什么上面的程序不执行。
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
都缩进了。