CSV文件中的两列在if语句中不起作用?

0 投票
2 回答
788 浏览
提问于 2025-04-18 11:30

我正在开发一个简单的应用程序,它可以读取发送过来的CSV文件,并根据文件中各列的数据点生成一些结果。数据文件是Data.csv:

Something, everything, 6, xy
Something1, everything1, 7, ab
Something2, everything2, 9, pq

我打开文件的方式如下:

FileOpen = opne('../sources/data.csv', 'rU')
FileRead = csv.reader(FileOpen, delimiter = ',')
FileRead.next()

for row in FileRead:
   #This does not work
   if row[0] == 'something' and row[1] == 'something1':
      print row[2]

   #This works
   if row[0] == 'something' and row[3] = 'xy':
      print row[2] 

上面的代码没有显示任何内容。但是如果我在条件判断中使用row[0]和row[3],它就能正常工作。所以问题出在第1列和第2列上,而第0列和第3列则没有问题。请问CSV文件的格式是否有问题?我是按照微软的步骤从Excel文件创建的CSV。

2 个回答

1

没错,问题就是出在那些空格上。要在Excel中去掉空格,你可以在有空格的那一列旁边插入一个新列,然后使用 =TRIM(C1). 这个公式。这样做之后,你就可以把处理好的数据复制粘贴到一个新文件里,然后从中创建一个CSV文件。

5

你使用和命名的 row 是完全正确的。主要的问题在于你文件中的空白字符。如果我执行 print row,我得到的结果是

['Something', ' everything', ' 6']
               ^              ^

解决方案很可能与

Dialect.skipinitialspace

When True, whitespace immediately following the delimiter is ignored. The default is False.

有关,具体可以参考这个链接 https://docs.python.org/2/library/csv.html#dialects-and-formatting-parameters

你可以在构造函数中像这样传递这个选项:

FileRead = csv.reader(FileOpen, delimiter = ',', skipinitialspace=True)

撰写回答