2017-12-05 14 views
0

私は姓となるはずのユーザーの入力を受け取るコードを持っています。私のコードはその入力を受け取り、入力名が関連付けられているプロジェクトと時間をcsvで検索します。私が実行している問題は、スペルが間違っているか、コードが動作しない各名前の最初の文字を大文字にしない場合です。ユーザーが最初の3文字を入力した場合など、コードが自動的に正しいスペルを引き受け、それに応じて入力を変更する機能や方法がありますか?私は非常に初心者のコーダーなので、どんな助けも素晴らしいだろう。Pythonの入力のためのスペルチェック

は、ここに参考のために私のコードです:あなたはケースを無視して、CSVからのユーザ入力と値の両方にstr.lowerを使用することができます

import csv 

# I've used full name to avoid duplicate first names in report 
full_name = input('Enter your full name: ') 

with open('Report1.csv') as csvfile: 
    hour_summation = {} 
    read_csv = csv.reader(csvfile, delimiter=',') 
    for row in read_csv: 
      if ' '.join((row[0], row[1])) == full_name.strip(): 
       hour_summation[row[2]] = hour_summation.get(row[2], 0) + int(float(row[3])) 
print('This is {} full hours report:'.format(full_name)) 
for k, v in hour_summation.items(): 
    print(k + ': ' + str(v) + ' hours') 
+1

可能なユーザ名の数がそれほど多くない場合は、それらのリストを作成し、その上に 'lower()'をコールして正規化します(名前を検索するために同じ正規化を行います)。 'difflib .SequenceMatcher'、特に 'ratio()' –

+0

ファジーマッチングを見ることができます。 https://marcobonzanini.com/2015/02/25/fuzzy-string-matching-in-python/ – SuperStew

+0

比較の前にすべての文字列を小文字にしておくと、操作が簡単になります。 '' full_name = input( 'あなたのフルネームを入力してください' ').strip()。lower() '' '' .join((row [0]、row [1]))lower() 'など – davedwards

答えて

1

str.startswithを使用すると、ユーザーの入力をcsvの値の先頭と一致させることができます。 inを使用して、ユーザーの入力がcsvの値であるかどうかを判断することもできます。

+0

これは素晴らしいです。私はlower()関数を使用することができました。私はまだstartswithを実装する方法を学んでいます。 – stevenmiller

+0

@stevenmillerもしあなたがおそらく 'value_from_csv.startswith(user_input):' – Galen

関連する問題