2017-11-27 4 views
0

https://drive.google.com/open?id=1aQkJYojDNMjNjJYlggxbkTq-KmzALDDb- pythonの

私はでseparedデータを挿入するには、このファイル(citations.dmp)とイムトラインを持っています|私は、次のエラー毎回受け取る何らかの理由で

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); 

:テーブルには、次の形式になってい

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() 

次のコードを使用してMySQLデータベースに

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 

あなたは助けることができます私?私はそれを修正しようとしている最後の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

お時間を頂き、誠にありがとうございます –