본문 바로가기
2021-1/Expert

MongoDB | csv 파일 insert 하기

by 이망고_ 2021. 12. 6.
with open('C:/Users/seohe/OneDrive/바탕 화면/Univ.csv', 'r', encoding='utf-8') as University:
    lines = csv.reader(University)
    next(lines)
    y = []
    for row in lines:
        x = {}  
        # x['originalName'] = row[0]
       
        if row[1] not in row[2]:
            tmp = (row[1] + ', ' + row[2].replace('\xa0','')).upper().split(',')
            tmp = list(map(lambda x:x.lstrip() , tmp))
            # tmp = (row[1] + ', ' + row[2]).replace("\xa0","")
        else:
            tmp = row[2].upper().replace('\xa0','').split(',')
            tmp = list(map(lambda x:x.lstrip() , tmp))
        # tmp = [row[1] + ', ' + row[2]]
        # print(tmp)
        # tmp = tmp.split(',')
       
        for t in tmp:
            x['inputName'] = t
            # print(x)
       
            x = {'originalName' : row[0]}
            y.append(x)
       
       
       
    Public_CollegeName.insert_many(y)
            # x = {'originalName' : row[0]}
        # x['inputName'] = tmp
       
               
        # print(x)
        # break
       
        # print("len : ", len(row), ",row : ", row)
        # print(row[0], row[1], row[2])
        # break
        # print(x)
       

진차 후덜덜하다...

3개월 처음으로 박사님한테 코드 설명듣는데,, 진짜 안 물어봤던 게 너무 후회되는,,, ㅠㅠ기분이다

진짜 몇 분 안되서 바로바로 코드를 짜시고 오류 생기니 바로 해결해주셨다.

 

오류해결 절차

1. 1번째 코드

with open('C:/Users/seohe/OneDrive/바탕 화면/Univ.csv', 'r', encoding='utf-8') as University:
    lines = csv.reader(University)
    next(lines)
   
    for row in lines:
        x = {}  
        x['originalName'] = row[0]
       
        if row[1] not in row[2]:
            tmp = (row[1] + ', ' + row[2].replace('\xa0','')).upper().split(',')
            tmp = list(map(lambda x:x.lstrip() , tmp))
            # tmp = (row[1] + ', ' + row[2]).replace("\xa0","")
        else:
            tmp = row[2].upper().replace('\xa0','').split(',')
            tmp = list(map(lambda x:x.lstrip() , tmp))
        # tmp = [row[1] + ', ' + row[2]]
        # print(tmp)
        # tmp = tmp.split(',')
       
        for t in tmp:
            x['inputName'] = t
            # print(x)
            Public_CollegeName.insert_one(x)
       
            # x = {'originalName' : row[0]}
        # x['inputName'] = tmp
       
               
        # print(x)
        # break
       
        # print("len : ", len(row), ",row : ", row)
        # print(row[0], row[1], row[2])
        # break
        # print(x)

duplicatie key error 가 발생하는 것이다

몽고DB 에 데이터를 넣어주면서 자동적으로 _id 가 생성되고 중복된 _id가 생성된다는 오류였다. 이를 막기 위해서 

 

2. 2번째 수정코드

with open('C:/Users/seohe/OneDrive/바탕 화면/Univ.csv', 'r', encoding='utf-8') as University:
    lines = csv.reader(University)
    next(lines)
   
    for row in lines:
        x = {}  
        x['originalName'] = row[0]
       
        if row[1] not in row[2]:
            tmp = (row[1] + ', ' + row[2].replace('\xa0','')).upper().split(',')
            tmp = list(map(lambda x:x.lstrip() , tmp))
            # tmp = (row[1] + ', ' + row[2]).replace("\xa0","")
        else:
            tmp = row[2].upper().replace('\xa0','').split(',')
            tmp = list(map(lambda x:x.lstrip() , tmp))
        # tmp = [row[1] + ', ' + row[2]]
        # print(tmp)
        # tmp = tmp.split(',')
       
        for t in tmp:
            x['inputName'] = t
            # print(x)
            Public_CollegeName.insert_one(x)
            x = {'originalName' : row[0]}
        # x['inputName'] = tmp
       
               
        # print(x)
        # break
       
        # print("len : ", len(row), ",row : ", row)
        # print(row[0], row[1], row[2])
        # break
        # print(x)

시간이 너무 오래 걸림

 x = {'originalName' : row[0]}
코드를 사용해줘서 중복되는 _id 생성을 막아주었다... 이런 생각 대체 어떻게??
 

3. 3번째 수정코드

with open('C:/Users/seohe/OneDrive/바탕 화면/Univ.csv', 'r', encoding='utf-8') as University:
    lines = csv.reader(University)
    next(lines)
    y = []
    for row in lines:
        x = {}  
        # x['originalName'] = row[0]
       
        if row[1] not in row[2]:
            tmp = (row[1] + ', ' + row[2].replace('\xa0','')).upper().split(',')
            tmp = list(map(lambda x:x.lstrip() , tmp))
            # tmp = (row[1] + ', ' + row[2]).replace("\xa0","")
        else:
            tmp = row[2].upper().replace('\xa0','').split(',')
            tmp = list(map(lambda x:x.lstrip() , tmp))
        # tmp = [row[1] + ', ' + row[2]]
        # print(tmp)
        # tmp = tmp.split(',')
       
        for t in tmp:
            x['inputName'] = t
            # print(x)
            x = {'originalName' : row[0]}
            y.append(x)

    Public_CollegeName.insert_many(y)
             
        # x['inputName'] = tmp
       
               
        # print(x)
        # break
       
        # print("len : ", len(row), ",row : ", row)
        # print(row[0], row[1], row[2])
        # break
        # print(x)

시간이 너무 오래 걸려서 insert_one() -> insert_many() 로 수정하는 것이 좋을 것 같다 하시면서 구글링

검색어 : mongodb insert many 구글링

https://docs.mongodb.com/manual/reference/method/db.collection.insertMany/

 

db.collection.insertMany() — MongoDB Manual

Docs Home → MongoDB Manualdb.collection.insertMany()mongosh MethodThis is a mongosh method. This is not the documentation for Node.js or other programming language specific driver methods.In most cases, mongosh methods work the same way as the legacy mon

docs.mongodb.com

시간이 오래 걸려서 insert_many() 문법을 보려고 구글링을 해주었다. 

insert_many() 리스트를 사용해주어서 y = [] 값을 next(lines) 아래에 생성해주었고

첫번째 for문 안에 있던 x['originalName'] = row[0] 두번째 for문에서 _id 중복되는 것을 막기 위해 사용해주어서 삭제해주었다. 

그리고 두번째 for문 아래에 y.append(x)를 추가해주면서 

for문 밖으로 Public_CollegeName.insert_many(y) 을 사용해주면서, y를 넣어주었다. 

 

진짜~~~~~ 이 코드 수정이, 이 과정이 수분 안에 이루어진 것이..다

갓갓 하는 이유를 ㅠㅠ 보면서 진짜 멋있었고 오늘 오후에 진짜 이 학과에서 내가 잘 할 수 있을런지 긴장이 너무 되고 힘들었는데, 하시는 거 보고 진짜 감탄만 나왔다.. 

3개월 되어서 부끄러워서 처음 물어본 게 너무 후회가 되었다.... 진작에 좀 물어볼 걸 그랬다...

진짜 멋찜...!!

'2021-1 > Expert' 카테고리의 다른 글

MongoDB | Group by  (0) 2021.12.06
Expert | Crawling Task  (0) 2021.12.06
MongoDB | csv 파일 읽어들어오기  (0) 2021.12.05
MongoDB | 엑셀파일 넣어주기  (0) 2021.12.05
Xshell | 명령어  (0) 2021.12.05