【发布时间】:2017-08-15 18:25:49
【问题描述】:
我正在读取 CSV 文件、删除标题并附加两列数据。一切都很好,除了最后添加了一行。例如,如果我有以下输入文件:
headerA | headerB | headerC
a | b | c
d | e | f
我希望输出文件看起来像:
a | b | c | g | h
d | e | f | g | h
但结果是这样的:
a | b | c | g | h
d | e | f | g | h
g | h
我终其一生都无法弄清楚为什么会这样。如果有人有解决方案,将不胜感激。这是我的代码:
for fileName in os.listdir(inPath):
if fileName.endswith('.csv'):
with open(inPath + fileName, 'rb') as csvin:
reader = csv.reader(csvin, delimiter=',')
i = reader.next()
with open(outPath + 'wrng_' + fileName, 'wb') as csvout:
writer = csv.writer(csvout, delimiter=',')
for row in reader:
j = fileName.split("_")[1].replace(".csv","")
row.append(j[2:-7] + '-' + j[4:-5] + '-' + j[:2] + ' ' + j[7:-2] + ':' + j[9:] + ':00')
row.append(i[1].split(" ")[2][:-1])
writer.writerow(row)
【问题讨论】:
-
CSV 文件末尾是否有空行?
-
@roganjosh 当我使用
extend()时,它会将其拆分为单独的字符,因此“1000”会变成“1,0,0,0”。当我使用extend()时,我仍然会在最后添加额外的行。 -
@digitaLink 是的,有。我试图在某处添加一个 if 语句来捕获空行,但不知道该怎么做。那会是解决方案吗?
-
空白行是问题...在
for row in reader:下添加了if row:语句。谢谢你们! -
您应该考虑使用
glob.glob('*.csv'),这将缩短您的代码并帮助减少一些ifs - docs.python.org/2/library/glob.html
标签: python python-2.7 csv