2013-06-24 4 views
4

헤더가없는 CSV 파일이 있는데이 파일의 특정 열에서 SQL 테이블을 만들려고합니다. 나는 여기에 주어진 해결책을 시도했다 : Importing a CSV file into a sqlite3 database table using Python, 하지만 col1이 정의되지 않았다는 오류가 계속 발생한다. 그런 다음 CSV 파일에 헤더를 삽입하려고 시도했지만 여전히 KeyError가 발생합니다.CSV 파일을 SQL 테이블로 변환하는 Python

도움을 주시면 감사하겠습니다. (나는 SQL에 익숙하지 않다.)

답변

1

.csv 파일에 헤더가 없으면 DictReader를 사용하지 않으려 고한다. DictReader는 1 행이 헤더 세트라고 가정하고 모든 후속 행의 키로 사용합니다. 이것이 아마도 KeyError을 얻는 이유 일 것입니다.

은 해당 링크에서 예의 수정 된 버전 : 코드 아래

import csv, sqlite3 

con = sqlite3.connect(":memory:") 
cur = con.cursor() 
cur.execute("CREATE TABLE t (col1, col2);") 

with open('data.csv','rb') as fin: 
    dr = csv.reader(fin) 
    dicts = ({'col1': line[0], 'col2': line[1]} for line in dr) 
    to_db = ((i['col1'], i['col2']) for i in dicts) 

cur.executemany("INSERT INTO t (col1, col2) VALUES (?, ?);", to_db) 
con.commit() 
0

이 경로에서 모든 CSV 파일을 읽어 sqllite 3 데이터베이스에 테이블로 모든 데이터를로드한다.

import sqllite3 
    import io 
    import os.path 
    import glob 
     cnx = sqlite3.connect(user='user', host='localhost', password='password', 
             database='dbname') 
     cursor=cnx.cursor(buffered= True); 


     path ='path/*/csv' 
     for files in glob.glob(path + "/*.csv"): 
      add_csv_file="""LOAD DATA LOCAL INFILE '%s' INTO TABLE tabkename FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES;;;""" %(files) 

      print ("add_csv_file: %s" % files) 
      cursor.execute(add_csv_file) 

     cnx.commit() 
     cursor.close(); 
     cnx.close(); 

이 기능이 작동하는지 알려주세요.

관련 문제