【发布时间】:2013-08-22 16:15:13
【问题描述】:
几天前我问了这个问题,因为我在编辑一些 CSV 文件时需要帮助:Fix numbering on CSV files that have deleted lines。
Stack Overflow 的人帮了我很多忙,但是我一直收到错误消息 AttributeError: 'int' object has no attribute 'strip'. 问题是我的 CSV 文件中的所有信息都不是整数。作为我的 python 新手,尝试修复它几天只会让事情变得更糟。这是我之前的问题中给出的错误信息:
import csv
import glob
import os
import re
numbered = re.compile(r'N\d+').match
for fn in fns:
# open for counting
reader = csv.reader(open(fn,"rb"))
count = sum(1 for row in reader if row and not any(r.strip() == 'DIF' for r in row) and numbered(row[0]))
# reopen for filtering
reader = csv.reader(open(fn,"rb"))
with open (os.path.join('out', fn), 'wb') as f:
counter = 0
w = csv.writer(f)
for row in reader:
if row and 'Count' in row[0].strip():
row = ['Count', count]
if row and not any(r.strip() == 'DIF' for r in row): #remove DIF
if numbered(row[0]):
counter += 1
row[0] = 'N%d' % counter
w.writerow(row)
该代码本质上应该运行一堆 CSV 文件并删除其中包含“DIF”的所有行,并修复因删除行而导致的编号。有人有什么建议吗?
【问题讨论】:
-
你有没有尝试过我的方法?我认为的问题是,如果您将其作为字符串读入,那么您所做的比您需要做的更多,那么它必须是一个字符串,然后您不必担心数据的性质。将 csv 添加到混合中会增加可能不需要的复杂性