>source

내 코드에 어리석은 실수가있을 수 있다는 것을 알고 있지만 그것을 얻을 수 없습니다. 사용자 입력을 받아 csv 파일 (실제로는 연락처 앱)에 쓰는 코드를 작성하고 있습니다.

import csv
fields = ['Name', 'Contact No.']
def store():
    file=open("contacts.csv", 'w')
    g=int(input("How many contacts do you want to save?"))
    a=[]
    for i in range(0,g):
        name=input("Enter Contact Name:")
        number=input("Enter Contact No.:")
        a.append(name)
        a.extend(number)
        i+=1
    writer=csv.writer(file)
    writer.writerow(fields)
    writer.writerow(a)       
    file.close()
store()

그래서 문제는 한 개 이상의 연락처를 입력하려고하면 이전 연락처가 지워지고 마지막으로 입력 한 연락처 만 남는다는 것입니다. 나는 실수가 목록 부분에 있다고 생각합니다. 내 코드의 실수를 말할 수 있습니까?


  • 답변 # 1

    먼저 i+=1 이 코드에서 아무것도하지 않습니다

    또한 list.extend를 잘못 사용하고 있으며 extend는 list.append와 비슷하지만 두 목록을 결합합니다. 내부 유형이 목록으로 간주되는 문자열이기 때문에 작동합니다. https://docs.python.org/3/library/stdtypes.html?highlight=extend 참조

    다시 추가를 사용하십시오 ...

    진짜 문제는 a는 모든 연락처의 큰 목록이며 각 연락처에 대한 행을 원한다고 가정합니다. 그래서 나는 당신이 writerow(a) 루프 내부의 메서드를 사용하고 모든 반복을 지 웁니다. 이렇게 :

    file=open("contacts.csv", 'w')
    g=int(input("How many contacts do you want to save?"))
    writer=csv.writer(file)
    writer.writerow(fields)
    for i in range(0,g):
        name=input("Enter Contact Name:")
        number=input("Enter Contact No.:")
        a=[]
        a.append(name)
        a.append(number)
        writer.writerow(a)
       
    file.close()
    
    

관련 자료

  • 이전 javascript - 조롱 dayjs 확장
  • 다음 reactjs - 버튼을 처음 클릭 할 때 Tom이 렌더링되는 이유는 무엇입니까?