본문 바로가기
2021-1/Expert

MongoDB | 엑셀파일 넣어주기

by 이망고_ 2021. 12. 5.
Task
엑셀 읽고 몽고DB에 넣어주기

처음에 내가 생각한 구조는 

pandas  로 엑셀파일을 df 으로 읽어주고

3개의 열을 한행으로 만들어 준 후에, 컬럼1을 변수a, 나머지 컬럼들을 변수b 에 넣어주려고 하였다.

 

하지만 서치해 보니 엑셀파일을 csv 으로 읽어주는 방법이 많았고 

박사님도 df 으로 읽는 방식과 엑셀파일을 읽는 방식 중 무엇이 더 빠를지는 모른다고 하셨지만

나는 그 방법을 몰라서,, 그냥 df 로 읽은 것인데 추천하는 방법은, 엑셀파일 -> csv 파일 로 변환하여 읽어주기!

 

그러고보면.. 방법들이 그걸 말하고 있으면 고집 부리지 말고 그 방법을 고대로 따라하는 것이?

나도 모르게 계속 익숙하고 기존에 사용하던 방법을 고집하는 것 같아,, 서 서치 시 주된 방법으로 읽어보자

1. csv 파일 변한후 파일 읽기

csv 파일 변환

우선 엑셀파일로 있던 파일을 '다른이름으로저장' 시 'csv'파일형식으로 저장한다


[vscode]

import csv

[vscode] 

with open('C:/Users/seohe/OneDrive/바탕 화면/Univ.csv', 'r', encoding='utf-8') as University:
    lines = csv.reader(University)
    next(lines)
    x = {}
    for row in lines:
        x['originalName'] = row[0]
        x['inputName'] = row[1:]
        # print("len : ", len(row), ",row : ", row)
        # print(row[0], row[1], row[2])
        # break
        print(x)

with 함수를 사용하여서 open('파일경로입력', '읽어준다는 의미r', encoding='utf-8'로 해주고)]

python 파일 열기 모드 

as 를 사용하여 짧은 변수에 지정해준다 : Universtiy

파일 읽고 쓰는 방법

1.

f = open("C:/doit/새파일.txt", 'w')
f.close()

* f.close() 를 통해서 파일을 직접 닫아주는 것이 오류를 줄여준다.( () 는 함수를 의미함)

 

2. 외부에 저장된 파일 읽기

f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()

f.open(새파일, 'r') 로 파일을 읽기모드로 연 후

readline() 

을 통해 파일의 첫번째 줄을 읽어준다. line = f.readline()

print(line) 을 해주면 첫 줄을 읽어주고, f.close() 를 써주어 파일을 닫아준다.

 

* 2-1) 만약 모든 줄을 읽어서 화면에 출력하고 싶다면야,

# readline_all.py
f = open("C:/doit/새파일.txt", 'r')
while True:
    line = f.readline()
    if not line: break
    print(line)
f.close()

while True:  무한 루프 안에서 f.readline() 을 사용해 파일을 계속해서 한 줄씩 읽어 들인다. 만약 읽을 줄이 없으면 break 를 수행한다. 

 

3. 

f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines()
for line in lines:
    print(line)
f.close()

readlines 함수 사용하는 방법입니다.

readlines 함수는 파일의 모든 줄을 읽어서 각각의 줄을 요소로 갖는 리스트로 돌려줍니다. != line (line과 같지않음 주의)

 

4.

f = open("C:/doit/새파일.txt", 'r')
data = f.read()
print(data)
f.close()

read 함수를 사용하는 방법입니다. 

f.read() 는 파일의 내용 전체를 문자열로 돌려줍니다. 

 

5. 지금까지 파일을 열고 닫아왔다면, f=open() 과 f.close() 안 쓰고 파일 읽는 방법

with open("foo.txt", "w") as f:
    f.write("Life is too short, you need python")

with문을 사용하면 with 블록을 벗어나는 순간 열린 파일 객체 f 가 자동으로 close 된다. 

이번에 짠 코드에서 선배랑 나도 with문을 사용했습니다. 

 

다시 본론으로 1. csv 파일 읽어들이기

with open('C:/Users/seohe/OneDrive/바탕 화면/Univ.csv', 'r', encoding='utf-8') as University:
    lines = csv.reader(University)
    #next(lines)
    x = {}
    for row in lines:
        x['originalName'] = row[0]
        x['inputName'] = row[1:]
        # print("len : ", len(row), ",row : ", row)
        # print(row[0], row[1], row[2])
        # break
        print(x)

첫 줄이 이상타..

첫 줄이 이상하게 출력이 되어서 그 다음줄부터 출력해주려면

3번째 줄에 있는 #next(lines) -> next(lines

주석처리를 제거해주면 됩니다.

제가 읽어들여온 엑셀 아니, csv 파일임다

 

2. MongoDB 접속 후 확인하기

읽어들어온 파일을 몽고DB 에 접속시켜서 넣어주려고 합니다.

[vscode]

from pymongo import MongoClient

[vscode]

client = MongoClient('IP주소 입력', authSource = 'admin')
Public = client['PUBLIC']
Public_CollegeName = client['PUBLIC']['CollegeName'] # Mongodb ColledgeName 에 접근
print(Public_CollegeName.find({})) # Print 로 찍어봐서 접속되었는지 확인 , 변수명 지정해주었으면 '' 안해주고 입력
 
 
 
client = 몽고클라이언트('IP주소', authSource = 'admin') 으로 접속해주고
몽고클라이언트에 있는 파일 중에 나는 Public 에 접속해서 파일을 넣어주어야 해서 Public=client['PUBLIC] 만들었다.
또 변수명을 하나 지정해주어서 몽고DB에 접속하려고 
몽고DB에 IP주소가 입력된 client 에서 PUBLIC 항목에서 CollegeName 항목에 파일을 넣어줄 것이기에 이를 변수로 지정해주었다.
MongoDB
 
그래서 
몽고DB 에 접속하려고 한다면, .find({}) 함수를 사용해주어서 뭔가가 나오면 잘 접속된 것이라고 한다
로그를 찍어보자. print(Public_CollegeName.find({}))
 

*이렇게 선배들이 짠 코드를 보고 생성하긴 했는데요,

정말 몽고DB 에 접속이 잘 되었는지 알려면 어떻게 해야 하죠?

print() 로 찍어본 후에

아래와 같이 출력이 되면(뭔가가 나오면) 잘 접속된 걸로 아시면 됩니다~

뭔가가 나와따

3. MongoDB 에 INSERT 해주기

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]
        r= row[1] + ', ' + row[2]
        x['inputName'] = r
        # print("len : ", len(row), ",row : ", row)
        # print(row[0], row[1], row[2])
        # break
        print(x)
        Public_CollegeName.insert_one(x)

Public_CollegeName.insert_one(x) 

을 사용해서 해당 csv 파일을 MongoDB에 넣어줄 수 있다!

csv 파일 몽고DB 에 넣기

변수로 지정해둔 Public_CollegeName 에 잘 인서트 가 되었다~~ (짝짝짝짝)

삼일을.. 별 성과가 없었는데 주말에 선배님이 도와주셔서ㅜㅜ 드디어ㅠㅠ 짰습니다..ㅜㅜ 선배님께 무한한 감사를.. (아메리카노로 대신함ㅡㅜ)

 

 

여기서 끝인 줄 아랏지? ....

출력된 데이터에서 수정할 부분이 몇 가지 있었다.1. \xa0 row[2] 에서 요게 출력이 되어서 삭제해주기 -> str.replace() 를 써줄 것이다2. row[1:] 부터는 list 형태로 만들어 주어야 한다.3. 모든 영문을 대문자로 변환해 줄거다 -> .upper() 를 써준다

 

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

MongoDB | csv 파일 insert 하기  (0) 2021.12.06
MongoDB | csv 파일 읽어들어오기  (0) 2021.12.05
Xshell | 명령어  (0) 2021.12.05
Xshell | 연동하기  (0) 2021.12.03
자주 쓰는 리눅스 명령어  (0) 2021.11.18