質問

私は持っています tab-delimited txt file タブで区切られ、行がnewlinesで区切られた行。これが実際にどのように見えるかです:

476502291\t\tLF3139812164\t\tTitle 1\tKids & Family\nGRAV_2011\t\tThe Full Picture\tIndependent\n [...etc...]

値は、1つではなく2つのタブで区切られる場合があることに注意してください。

これをMySQLテーブルに挿入する必要があります。これにより、次のようになります。

ID             title               genre
476502291      Title 1             Kids & Family
GRAV_2011      The Full Picture    Independent

タブが分離されたTXTファイルを読んで実行するにはどうすればよいですか for 値の名前のテーブルに値を挿入するためのループ vendor mysqldbを使用しますか?

>>> import MySQLdb
>>> conn = MySQLdb.connect (host = "localhost",
                             user = "me",
                             passwd = "password",
                             db = "my-db")
>>> cursor = conn.cursor ()
>>> # for loop  # how to read from the txt file to insert it as required?
>>>     # cursor.execute (INSERT...)
>>> conn.commit()
>>> conn.close()
役に立ちましたか?

解決

ステップ1.を読みます csv モジュール。 http://docs.python.org/library/csv.html. 。これはあなたが望むことをします。

with open('your_data_file.dat','r') as source:
    rdr= csv.reader( source, delimiter='\t', quotechar='')
    for row in rdr:
        # you have your columns with which to do your insert.
conn.commit()

ステップ2.コンテキストマネージャーも読み上げます。

from contextlib import closing

with open('your_data_file.dat','r') as source:
    rdr= csv.reader( source, delimiter='\t', quotechar='')
    with closing(conn.cursor()) as cursor:
        for row in rdr:
            # you have your columns with which to do your insert.
conn.commit()

これにより、カーソルとファイルが適切に閉じられていることが保証されます。

他のヒント

タブがファイル内の区切り文字としてのみ使用されている限り、次のようなことができるはずです。

import re

# connect to MySQLdb

with open(file_name) as f:
    for line in f:
        id, title, genre = re.split(r'\t+', line)
        # execute INSERT statement

アイデアは、IDとタイトルの間には常に2つのグループのタブがあり、もう1つはタイトルとジャンルの間で2つのグループを持っているということです。使用して re.split() の上 \t+ (1つ以上のタブ)興味のあるフィールドで長さ3のリストが表示されます。

ファイルにこの形式と一致しない行がある場合は、追加のチェックを追加する必要があります。 data = re.split(r'\t+', line)if len(data) == 3: タプルが開梱する前。

編集: このソリューションには、空白のフィールドがないという仮定が付いているため、ラインがIDとジャンルだけを持っているのが合法であるが、タイトルは機能しない場合は機能しません。タイトルを持つことができる場合でも機能しますが、IDが欠落しているときにリーディングされたタブがあり、ジャンルが欠落しているときにTrailing Tabがある限り、IDやジャンルはありません。

Import Reg

mysqldbに接続します

open(file_name)as f:for for f in f:id、title、genre = re.split(r ' t+'、line)#[insertステートメント]を実行

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top