タブが削除された値をデータベースに挿入します
-
27-10-2019 - |
質問
私は持っています 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ステートメント]を実行