In [1]:
import os
#os 모듈을 통해서
#운영체제 레벨(서버는 ex.우분투)에서 다루는 파일 폴더 생성하고 삭제하기가 가능
#기존에는 ("../../~~") 이런 식으로 경로를 직접 입력 했으나
In [2]:
os.listdir()
#현재 폴더 안에 있는 파일들을 리스트로 뽑는 것
Out[2]:
In [3]:
os.listdir("../")
Out[3]:
In [4]:
for csv_file in os.listdir("../"):
pass
In [6]:
[
file_name
for file_name
in os.listdir("../01일차.수_입문/")
if file_name.endswith(".ipynb") # csv 파일 가져오기, 엑셀 파일 가져오기로 사용
]
Out[6]:
In [8]:
os.path.join("data", "data.csv")
Out[8]:
In [9]:
os.curdir
Out[9]:
In [10]:
os.path.join(os.curdir, "data", "data.csv")
# 이렇게 하면 경로를 알려줘. 앞으로 만들 때는 무조건 이렇게 만들겠다.
# os.path.join(os.curdir, "data", file_name)
Out[10]:
In [11]:
os.makedirs("data") #잠재적인 문제가 있다.
In [12]:
os.listdir() #폴더 만들기는 쉽게 됩니다.
Out[12]:
In [13]:
os.rmdir("data") #잠재적인 문제가 있다.
In [14]:
os.listdir()
Out[14]:
In [15]:
os.makedirs("data") # DATA라는 폴더 안에 간단한 텍스트 파일 만들기
In [16]:
os.listdir(os.path.join(os.curdir,"data"))
Out[16]:
In [18]:
os.rmdir("data")
# 폴더 안에 파일이 있으면 삭제가 안 된다
# os.listdir()로 찾아본 다음에 폴더면 또 들어가서 다시 재귀적으로 찾아보고,
# 파일이면 삭제하고 상위폴더로 올라와서 그리고 rmdir() ...
In [19]:
import shutil
In [20]:
os.listdir(os.path.join(os.curdir, "data"))
Out[20]:
In [21]:
shutil.rmtree(os.path.join(os.curdir, "data"))
In [22]:
os.listdir(os.path.join(os.curdir, "data"))
In [23]:
os.makedirs(os.path.join(os.curdir, "data"))
In [25]:
shutil.rmtree(os.path.join(os.curdir, "data"))
In [28]:
os.makedirs(os.path.join(os.curdir, "data"))
os.makedirs(os.path.join(os.curdir, "data", "world"))
# 만약 "data", "world"라는 폴더가 있으면, 삭제하는 기능 ...
In [29]:
# 폴더의 유무를 확인하고, 있으면 삭제한다.
if "data" in os.listdir():
print("./data/ 폴더를 삭제합니다.")
shutil.rmtree(os.path.join(os.curdir, "data"))
# "data"라는 폴더를 생성하고, 그 안에 "world"라는 폴더를 생성한다.
print("./data/ 폴더를 생성합니다.")
os.makedirs(os.path.join(os.curdir, "data"))
os.makedirs(os.path.join(os.curdir, "data", "world"))
In [30]:
import pymysql
db = pymysql.connect(
"db.fastcamp.us",
"root",
"dkstncks",
"world",
charset='utf8'
)
country_df = pd.read_sql("SELECT * FROM Country;", db)
city_df = pd.read_sql("SELECT * FROM City;", db)
#Country.Code를 바탕으로, City.CountryCode와 매칭해서 찾아야 함
#Country.Name은 반드시 가지고 와야지 파일명으로 저장이 가능
In [31]:
city_groups = city_df.groupby("CountryCode")
In [35]:
for index, row in country_df.iterrows():
country_code = row["Code"]
country_name = row["Name"]
city_df = city_groups.get_group(country_code)
city_df.to_csv(os.path.join("data", "world", "{country_name},csv".format(country_name=country_name)))
In [37]:
#"ATA"라는 애가 없다고 나오니까 테스트
SQL_QUERY = """
SELECT *
FROM City
WHERE CountryCode = "ATA"
;
"""
pd.read_sql(SQL_QUERY, db)
Out[37]:
In [38]:
city_groups.get_group("ATA")
In [39]:
"ATA" in city_groups["CountryCode"].unique()
Out[39]:
In [40]:
#없는게 증명 됐으니 if문 첨가
for index, row in country_df.iterrows():
country_code = row["Code"]
country_name = row["Name"]
if country_code in city_df["CountryCode"].unique():
one_city_df = city_groups.get_group(country_code)
one_city_df.to_csv(os.path.join(os.curdir, "data", "world", "{country_name}.csv".format(country_name=country_name)))