我有两个看似相同的CSV文件。一个人的价值由我输入,另一个人用Python写的。 Python能够在我编写的CSV中找到值,但无法在它编写的CSV中找到它们。
CSV看起来像这样:
line1: <blank>
line2: 0
line3: 1
以下是我用来编写CSV的内容,其中ID是我已经填写的列表:
myfile = open("Unused IDs.csv", 'ab')
wr = csv.writer(myfile, lineterminator='\n', quoting=csv.QUOTE_ALL)
wr.writerow(ID)
以下是我用来搜索CSV的内容:
query = 1
isThere = False
try:
with open('Unused IDs.csv', 'rb') as csvfile:
my_content = csv.reader(csvfile)
for row in my_content:
Row = int(row[0])
if Row == query:
isThere = True
except IndexError:
pass
正如我所说,有趣的是,当我使用我手动输入的CSV时,isThere评估为True。
注意:
对于Python生成的CSV,
>>> print repr(open('Unused IDs.csv', 'rb').read())
'\r\n"0"\n"1"\n'
对于'人工'生成的CSV,
>>> print repr(open('Unused IDs.csv', 'rb').read())
'0\r\n1\r\n'
答案 0 :(得分:3)
故事的道德:如果您不希望它跳过阅读文件的其余部分,请不要放入异常处理程序。不要只是沉默你不理解的例外。
如果没有IndexError
异常处理程序,您的代码实际上不适用于'python generated'示例文件,因为文件以空行开头。因此,当IndexError
索引失败时,您会收到row[0]
异常。这意味着忽略了文件的 rest ,当您向右跳到except IndexError
行时,Python执行pass
就是这样。
至少,您的代码可以避免使用IndexError
:
for row in my_content:
if not row:
continue
并完全删除try:
/ except IndexError:
语句。您还可以将异常处理程序移动到更接近抛出异常的实际代码:
for row in my_content:
try:
Row = int(row[0])
except (IndexError, ValueError):
print "Skipped a row, could not parse a number"
有了这样的更改,您的示例文件都可以正常工作,例如isThere
设置为True
。