将制表符分隔的值插入到数据库中
我有一个tab-delimited txt file
,行之间用制表符分隔,行之间用换行符分隔。这就是它实际上是这样的:将制表符分隔的值插入到数据库中
476502291\t\tLF3139812164\t\tTitle 1\tKids & Family\nGRAV_2011\t\tThe Full Picture\tIndependent\n [...etc...]
注意,有时值由两个标签,而不是一个分离。
我需要插入一个MySQL表这一点,这将导致如下:
ID title genre
476502291 Title 1 Kids & Family
GRAV_2011 The Full Picture Independent
我将如何读制表符分隔txt文件,并以值插入一个运行for
循环使用MySQLdb的表名为vendor
?
>>> 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
的想法是,你将永远有两组选项卡,一个在标题和标题之间,以及标题和类型之间的另一个。通过使用re.split()
上\t+
(一个或多个选项卡),你会得到一个长度为3的列表,你感兴趣的领域。
如果在您的文件不符合此格式,您应该添加一些额外的任何线检查,可能是在元组解开之前沿着data = re.split(r'\t+', line)
和if len(data) == 3:
的行。
编辑:这个解决方案假设你没有空白字段,所以如果一行只有一个ID和一个流派,但没有标题是合法的,这是行不通的。只要缺少标识时有前导标签,缺少流派时标签尾随标签,只要标题没有标识或流派,它仍然可以工作。
进口REG
具有开放(FILE_NAME)连接到MySQLdb的
为f: 在F线:0ID,标题,流派= re.split(R '\吨+',线) #执行INSERT语句
“主要是无法做for循环”有什么问题?所有工作完成后,提交通常会持续最后。这是你的问题吗?在哪里提交?或者你想知道如何阅读带有分隔符分隔符的CSV文件?你有没有读过Python的'csv'模块? – 2012-01-12 19:40:01
感谢您的回复。后者。 – David542 2012-01-12 19:40:31
有没有空白字段?也就是说,\ t \ t总是等于'\ t',或者'\ t \ t'有时是指“分隔符,空白字段,分隔符”? – ruakh 2012-01-12 19:42:44