希望你能提供帮助。我试图迭代.csv文件并删除第一项的第一个字符为#的行。 虽然我的代码确实删除了必要的行,但我会看到超出范围的"字符串索引"错误。
我的代码如下:
input=open("/home/stephen/Desktop/paths_output.csv", 'rb')
output=open("/home/stephen/Desktop/paths_output2.csv", "wb")
writer = csv.writer(output)
for row in csv.reader(input):
if (row[0][0]) != '#':
writer.writerow(row)
input.close()
output.close()
据我所知,我没有空行,我试图迭代。
答案 0 :(得分:0)
我怀疑有第一个单元格为空的行,因此row[0][0]
会尝试访问空字符串的第一个字符。
你应该尝试:
for row in csv.reader(input):
if not row[0].startswith('#'):
writer.writerow(row)
答案 1 :(得分:0)
在尝试索引之前检查字符串是否为if row[0]
为空:
input=open("/home/stephen/Desktop/paths_output.csv", 'rb')
output=open("/home/stephen/Desktop/paths_output2.csv", "wb")
writer = csv.writer(output)
for row in csv.reader(input):
if row[0] and row[0][0] != '#': # here
writer.writerow(row)
input.close()
output.close()
或者只使用if row[0].startswith('#')
作为您的条件
答案 2 :(得分:0)
你可能遇到一个空字符串。
也许试试
`如果行和行[0] [0]!='#':
答案 3 :(得分:0)
那么为什么你不确定你是否碰到任何一个,即使它们存在,先检查这条线是否为空,如下所示:
input=open("/home/stephen/Desktop/paths_output.csv", 'rb')
output=open("/home/stephen/Desktop/paths_output2.csv", "wb")
writer = csv.writer(output)
for row in csv.reader(input):
if row:
if (row[0][0]) != '#':
writer.writerow(row)
else:
continue
input.close()
output.close()
使用* .csv文件时,最好在文本编辑器中查看它们,以确保分隔符和end_of_line字符与您认为的一样。 sniffer也很好读。
干杯
答案 4 :(得分:0)
为什么不提供工作代码(包括导入)并像往常一样包装上下文管理器中的物理资源?
像这样:
#! /usr/bin/env python
"""Only strip those rows that start with hash (#)."""
import csv
IN_F_PATH = "/home/stephen/Desktop/paths_output.csv"
OUT_F_PATH = "/home/stephen/Desktop/paths_output2.csv"
with open(IN_F_PATH, 'rb') as i_f, open(OUT_F_PATH, "wb") as o_f:
writer = csv.writer(o_f)
for row in csv.reader(i_f):
if row and row[0].startswith('#'):
continue
writer.writerow(row)
一些注意事项:
如果您还想要删除空行,则可以使用以下条件代替continue
:
if not row or row and row[0].startswith('#'):
你应该准备好了。 HTH
回答上述代码行的注释,该注释也导致跳过空白输入“Lines”。 在Python中,我们从左到右(懒惰的评估)和布尔表达式的短路,所以:
>>> row = ["#", "42"]
>>> if not row or row and row[0].startswith("#"):
... print "Empty or comment!"
...
Empty or comment!
>>> row = []
>>> if not row or row and row[0].startswith("#"):
... print "Empty or comment!"
...
Empty or comment!