2017-04-25 179 views
0

這段代碼來自一個python腳本,我將在CSV文件中搜索員工的員工id列,然後輸出它,如果它存在於柱。在python中用if/else語句在CSV查找中使用通配符

我想要做的是,如果有人更改CSV文件中的列順序,通過檢查列的標題,在csv文件中向我拋出列3不再是員工ID列的錯誤,通過使用通配符來查看它是否包含員工ID的一部分。

import csv 

with open('Report1.csv', 'rb') as user_file: 
    reader = csv.reader(user_file) 

    for column in reader: 
     print column[2] 
     employeeIid = column[2] 

     if column[2] == 'Employee ID': 
      print employeeIid 
     else: 
      print "Employee ID Column in CSV changed-please repair" 

當我運行上面的代碼中,我得到這樣的:

Employee ID 
123456 
Employee ID Column in CSV changed-please repair 

它打印員工ID,以及警告錯誤。我如何改進/修復我的代碼?

請注意:員工ID是CSV文件中的第3列(不是2-位,我認爲Python使用0作爲開始)。

另外,我該如何忽略標題,並且只打印員工ID號(例如123456)而不是頭和實際的號碼?

+0

您是否試圖迭代列? – James

+0

看看'in'和'break'。 – Parfait

+0

@詹姆斯我想我是。任何指標瞭解這一點?我對python相當陌生! – Xtos

回答

1

看起來你的代碼混淆了行和列。

reader的每次迭代都會返回一行數據。 第一次迭代從您的csv文件返回header/columns

另外,使用r而不是rb以文本模式打開文件。

例子。

import csv 

with open('Report1.csv', 'r') as user_file: 
    reader = csv.reader(user_file) 

    for row_idx, row in enumerate(reader): 
     # check if header row 
     if row_idx == 0: 
      # check column 2 of this row 
      if row[2].strip() != "Employee ID": 
       print("Employee ID Column in CSV changed-please repair") 
       break 
     else: 
      # to only print "Employee ID" 
      print(row[2]) 
      # to print all columns in the row 
      # print(', '.join(row)) 
+0

這有點奏效。我必須刪除print(','.join(row))''''''''部分',否則它會在打印輸出中添加許多逗號,這是由於其他聽到字段的原因造成的......它還會打印名稱和電子郵件領域。我只想要Employee ID列。 請糾正我,或在上面的腳本評論一些事情,所以我可以理解和重用這個邏輯。 1.除了「員工ID」,因此'!=',邏輯刪除了所有內容嗎?和2.我不太明白'print(','.join(row))' - 這是一個函數嗎? 3.'.strip()'功能呢? 4.「枚舉行」這是幹什麼的? – Xtos

+0

1.邏輯是檢查'員工ID'是否是您csv文件中的第二列。如果不是,則文件不會被進一步讀取。 2.「連接」功能是將數據拼接在一起的好方法。你可以用你想要的任何分隔符替換逗號。看到一堆空的逗號意味着讀取任何空行。3.'.strip()'函數在文本比較之前刪除任何前導或尾隨的空格。 4.'enumerate'是for循環中生成索引的好方法。 'enumerate(reader)返回一個包含兩個值的元組 - 索引和實際值。 – Slakker

+0

若要簡單地打印「員工ID」,請將「else」邏輯更改爲 'else:print(row [2])' – Slakker