2016-08-29 16 views
-2

私はこのコーディングでは全く新しいですが、動作しなくてもモチベーションがたくさんあります。辞書のpythonとcsvファイル

私はCSVファイルの辞書で作業しようとしています。私は新しいファイルを開いて編集することになるが、csvファイルから読み込もうとすると何かが失われていると思う。 39-41行でエラーが発生している可能性があります。私はおそらく何か間違っていますが、それは何ですか? コードは次のとおりです。

import csv 
import os 
import os.path 

phonebook = {} 
def print_menu(): 
    print('1. Print phone book') 
    print('2. add phone book') 
    print('3. look for number using first name only') 
    print('4. look by last name') 
    print('5. exit') 
    print() 

menu_selection = 0 

while menu_selection != 5: 

    if os.path.isfile('my_phonebook.csv') == True: 
     csv_file = open('my_phonebook.csv', 'a', newline = '') 
     writer = csv.writer(csv_file) 
    else: 
     csv_file = open('my_phonebook.csv', 'w', newline = '') 
     writer = csv.writer(csv_file) 
     headers = ['first_name','last_name','phone_number'] 
     writer.writerow(headers) 
    print_menu() 
    menu_selection = int(input('type menu selection number')) 

    if menu_selection == 2: #add list in phone book 
     first_name = input("enter first name: ") 
     last_name = input("enter last name: ") 
     phone_number = input("enter phone number: ") 
     writer.writerow([first_name,last_name,phone_number]) 
     csv_file.close() 
    elif menu_selection == 1: #print phone book 
     print("phone book:") 
     listGen = csv.reader(csv_file, delimiter=' ', quotechar='|') #error starts here and in the next two rows... 
     for row in csv_file: 
      print(row) 
    elif menu_selection == 3: #look for number using first name only 
     print('look up number') 
     first_name = input('first name:') 
     if first_name in phonebook: 
      print('the number is', phonebook[phone_number]) 
     else: 
      print('name not found') 
    elif menu_selection == 4: #print all details of last name entered 
     print('search by last name') 
     last_name = input('please enter last name: ') 
     for row in csv_file: 
      print(row) 
+1

あなたの質問を編集し、あなたが得るエラーを追加することはできますか? Pythonでは、これらのメッセージには多くの情報が含まれており、列車ではエラーの大部分を読むだけで簡単に修正できます。 –

+0

pythonのドキュメントの例は次のとおりです:https://docs.python.org/2/library/csv.html#examples? –

答えて

1

ファイルの内容はありますか?ループの空のイテレータをループしているように見えます。次のようなものを試してみてください。

for row in csv_file: 
    print(row) 
else: 
    print('no phone numbers') 

+0

クイックアンサーありがとうございます。 コードを追加するときにエラーが発生します csv_fileの行: io.UnsupportedOperation:読み取り不可 –

0

以下のコードを確認してください。 私も修正しようとしたいくつかのエラーがありました。

csvを読むために、私はcsvリーダーモジュールを使用しませんでした。

これを使用する場合は、search()関数のコードを置き換えてください。

import csv 
import os 
import os.path 

phonebook = {} 
def print_menu(): 
    print('1. Print phone book') 
    print('2. add phone book') 
    print('3. look for number using first name only') 
    print('4. look by last name') 
    print('5. exit') 
    print() 

def search(name): 
    phonebook = open('my_phonebook.csv','r') 
    name_found = True 
    for line in phonebook: 
     if name in line: 
      fname,lname,num = line.split(',') 
      print "First Name is ",fname.strip() 
      print "Last Name is ",lname.strip() 
      print 'the number is', num.strip() 

      name_found = True 
    if not name_found: 
     print('name not found') 
    return  
menu_selection = 0 

while menu_selection != 5: 


    print_menu() 
    menu_selection = int(input('type menu selection number - ')) 

    if menu_selection == 2: #add list in phone book 
     if os.path.isfile('my_phonebook.csv') == True: 
      csv_file = open('my_phonebook.csv', 'a') 
      writer = csv.writer(csv_file) 
     else: 
      csv_file = open('my_phonebook.csv', 'w') 
      writer = csv.writer(csv_file) 
      headers = ['first_name','last_name','phone_number'] 
      writer.writerow(headers) 
     first_name = input("enter first name: ") 
     last_name = input("enter last name: ") 
     phone_number = input("enter phone number: ") 
     writer.writerow([first_name,last_name,phone_number]) 
     csv_file.close() 

    elif menu_selection == 1: #print phone book 
     print("phone book:") 
     if os.path.isfile('my_phonebook.csv') == True: 
      csv_file=open('my_phonebook.csv','r') 

      for row in csv_file: 
       print(row) 
      csv_file.close() 
     else: 
      print "Phone book file not created. First create it to read it" 

    elif menu_selection == 3: #look for number using first name only 
     print('look up number') 
     first_name = input('first name:') 
     search(first_name) 


    elif menu_selection == 4: #print all details of last name entered 
     print('search by last name') 
     last_name = input('please enter last name: ') 
     search(last_name) 

出力:

C:\Users\dinesh_pundkar\Desktop>python b.py 
1. Print phone book 
2. add phone book 
3. look for number using first name only 
4. look by last name 
5. exit 
() 
type menu selection number - 1 
phone book: 
Phone book file not created. First create it to read it 
1. Print phone book 
2. add phone book 
3. look for number using first name only 
4. look by last name 
5. exit 
() 
type menu selection number - 2 
enter first name: "Dinesh" 
enter last name: "Pundkar" 
enter phone number: "12345" 
1. Print phone book 
2. add phone book 
3. look for number using first name only 
4. look by last name 
5. exit 
() 
type menu selection number - 1 
phone book: 
first_name,last_name,phone_number 

Dinesh,Pundkar,12345 

1. Print phone book 
2. add phone book 
3. look for number using first name only 
4. look by last name 
5. exit 
() 
type menu selection number - 3 
look up number 
first name:"Dinesh" 
First Name is Dinesh 
Last Name is Pundkar 
the number is 12345 
1. Print phone book 
2. add phone book 
3. look for number using first name only 
4. look by last name 
5. exit 
() 
type menu selection number - 4 
search by last name 
please enter last name: "Pundkar" 
First Name is Dinesh 
Last Name is Pundkar 
the number is 12345 
1. Print phone book 
2. add phone book 
3. look for number using first name only 
4. look by last name 
5. exit 
() 
type menu selection number - 5 

C:\Users\dinesh_pundkar\Desktop> 
関連する問題