此脚本的目标很简单:
读入.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
我想知道为什么上面的程序没有执行。
答案 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 underindented
或csv_out.writerow
是否过度缩进。