2017-11-27 4 views
0

https://drive.google.com/open?id=1aQkJYojDNMjNjJYlggxbkTq-KmzALDDb- 파이썬

I에 의해 separed 데이터를 삽입이 파일 (citations.dmp) 및 메신저 노력 '을 가지고 | 다음 코드를 사용하여 MySQL 데이터베이스로 :

import MySQLdb 

file = open('citations.dmp', 'r').readlines() 
list = [] 
for x in file: 
    a = str(x.replace('\t', '')) 
    a = str(a).split('|') 
    a.pop(len(a) - 1) 
    list.append(a) 

db = MySQLdb.connect(
    host='127.0.0.1', 
    user='root', 
    passwd='', 
    db='tururu' 

) 

c = db.cursor() 


print('Inserting...') 

query = """ INSERT INTO `citations` (`cit_id`,`cit_key`,`pubmed_id`,`medline_id`,`url`,`text`,`taxid_list`) 
      VALUES (%s,%s,%s,%s,%s,%s,%s)   
     """ 

c.executemany(query, list) 
db.commit() 

db.close() 

테이블의 형식은 다음과 같습니다

Traceback (most recent call last): 
    File "C:/Users/lucas/PycharmProjects/bruno/tst.py", line 27, in <module> 
    c.executemany(query, list) 
    File "C:\ProgramData\Anaconda3\lib\site-packages\MySQLdb\cursors.py", line 281, in executemany 
    self._get_db().encoding) 
    File "C:\ProgramData\Anaconda3\lib\site-packages\MySQLdb\cursors.py", line 306, in _do_execute_many 
    v = values % escape(arg, conn) 

TypeError: not all arguments converted during string formatting 

당신이 도와 드릴까요 : 나는 다음과 같은 오류 매번를받을 어떤 이유

CREATE TABLE `citations` (
        `cit_id` VARCHAR(200) NULL, 
        `cit_key` VARCHAR(200) NULL, 
        `pubmed_id` VARCHAR(200) NULL, 
        `medline_id` VARCHAR(200) NULL, 
        `url` LONGTEXT NULL, 
        `text` LONGTEXT NULL, 
        `taxid_list` LONGTEXT NULL); 

을 나를? 나는 그것을 고치려고 지난 3 일 안에있다.

+0

입력 한 Google 문서 도구 링크가 공개되지 않았으므로 해결할 수 있습니까? 야생 추측은 파일을 읽을 때 잘못된 열 수로 끝나지 만 확실히 디버그해야합니다. –

+0

링크가 작동합니다. 죄송합니다. 도와 줘서 고마워. –

+0

목록을 인쇄하고 모든 값이 올바른지 확인하십시오. –

답변

0

당신은 가져 오기 파일에이 라인에 문제가 :

5384 |  Associate Editor IJSEM (2001) (Trichlorobacter thiogenes)  |  0  |  0  |      |  Associate Editor, IJSEM \"Validation List no. 78 (footnote ||).\" Int. J. Syst. Evol. Micr  obiol. (2001) 51:1-2. (Note: type strain information) |  115783 | 

은 9 개 필드로 분할합니다. 삽입 쿼리의 형식 문자열은 7 개만 필요합니다. 큰 가져 오기 목록 (코드의 list 변수)에 밀어 넣는 하위 목록에는 항상 정확히 7 개의 요소가 있는지 확인하기 위해 파일 구문 분석에 일부 유효성 검사를 추가해야합니다. 그에 따라 예외를 처리하십시오. - 행에 열이 너무 적거나 무시하거나 기본값으로 채우는 경우 행 수가 너무 많으면 어느 행이 올바른지 결정하십시오.

이 특수한 경우는 이라는 구분 기호가 footnote ||에 나타나지 않으므로 잘못된 가정으로 인해 발생한다고 생각합니다. 이러한 비정상적인 것을 필터링하기위한 정규식 로직을 추가하여이를 해결할 수 있습니다.

+0

시간 내 주셔서 대단히 감사합니다. –