2017-04-25 266 views
0

このコードは、私が持っているPythonスクリプトのものです。従業員のCSVファイル内の従業員ID列を検索して出力しますカラム。Pythonのif/else文でのワイルドカードの使用

誰かがCSVファイルの列の順序を変更した場合、csvファイルの列のヘッダーを確認しても列3がEmployee ID列ではないというエラーが表示されるワイルドカードを使用してEmployee 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

@James私は私だと思う。これを理解するためのあらゆるポインタ?私はかなり新しいPythonです! – Xtos

答えて

1

あなたのコードは行と列を混同しているようです。

各反復readerは1行のデータを返します。 最初の反復では、CSVファイルからheader/columnsが返されます。

さらに、rbの代わりにrを使用してファイルをテキストモードで開きます。

例。

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. "Employee ID"以外のすべてを削除するロジックだったので、 '!='?私は 'print( '、' .join(row))'をよく理解していません。これは関数ですか? 3. '.strip()'関数もありますか? 4.列挙する行これは何をするのですか? – Xtos

+0

1.ロジックは、「従業員ID」がcsvファイルの2番目の列であるかどうかをチェックすることでした。そうでない場合、ファイルはそれ以上読み取られません。 2. 'join'関数は、行内のデータを一緒に縫い合わせるのに便利です。カンマを任意の区切り記号に置き換えることができます。空のカンマの束を見ることは、空の行の読み取りを暗示します。 3. '.strip()'関数は、テキストを比較する前に先頭または末尾の空白を削除します。 4. 'enumerate'はforループでインデックスを生成する良い方法です。 'enumerate(reader)は、インデックスと実際の値の2つの値からなるタプルを返します。 – Slakker

+0

単に '従業員ID'を表示するには、' else'ロジックを 'else:print(row [2])' – Slakker

関連する問題