我有一个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()
答案 0 :(得分:1)
只要标签仅用作文件中的分隔符,您就应该能够执行以下操作:
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和标题之间,另一组在标题和流派之间。通过在re.split()
(一个或多个标签)上使用\t+
,您将获得一个长度为3的列表,其中包含您感兴趣的字段。
如果你的文件中有任何行与这种格式不匹配,你应该在元组解包之前添加一些额外的检查,可能是data = re.split(r'\t+', line)
和if len(data) == 3:
的行。
编辑:此解决方案假设您没有空白字段,因此如果某个行只有一个ID和一个类型但没有标题是合法的,那么这将无效。只要在缺少ID时有前导选项卡,并且在缺少类型时有尾随选项卡,它仍然可以有标题但没有ID或类型。
答案 1 :(得分:1)
步骤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()
这将确保正确关闭游标和文件。
答案 2 :(得分:0)
import reg
open(file_name)为f: 对于f中的行: id,title,genre = re.split(r'\ t +',line) #cute INSERT语句