【问题标题】:Two columns from CSV file are not working for if-statement?CSV 文件中的两列不适用于 if 语句?
【发布时间】:2014-06-29 17:16:31
【问题描述】:

我正在开发一个简单的应用程序,它读取发送的 CSV 文件并根据列中的数据点生成一些结果。数据.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] 

上面的代码没有显示任何内容。但是,如果我在 if 条件中使用 row[0] 和 row [3] ,效果很好。所以问题出在第 1、2 列。但 0 和 3 列工作正常。 CSV 的文件格式是否错误?我按照微软程序从 excel 文件创建 csv。

【问题讨论】:

  • row[0] 它不是行。所以row[0] 实际上是“Something”,row[1] 是“everything”,第一行 row[2] 是 6
  • something1 vs Everything1
  • 你想达到什么目的?
  • @Jasper is row[0] == 'something' and row[1] == 'everything' 表示我想显示 6。但它没有显示
  • 你需要row[0] == 'Something' and row[1] == 'everything' 大写S

标签: python csv if-statement


【解决方案1】:

row的使用和命名是完全正确的。主要问题是文件中的空白。如果我print row,我会得到

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

解决方案很可能会处理

方言.skipinialspace

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)

【讨论】:

  • 我认为你是对的,但文档没有显示如何使用 Dialect.skipinitialspace 。你知道怎么用吗?
  • 看准了!是的,有空格。
  • 更新了答案以包含确切的用法。
【解决方案2】:

是的,它们毕竟是空间。要在 Excel 中删除空格,请在包含空格的列附近插入一个新列,用户 =TRIM(C1). 然后您可以将数据复制粘贴到一个新文件中并从中创建一个 CSV。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多