我正在努力将数据库从自定义MSSQL CMS移植到MYSQL - Wordpress。我使用Python来读取带有\t
描述列的txt文件,每行一行。
我正在尝试编写一个Python脚本,它将读取此文件(fread)并[最终]使用insert语句创建一个MYSSQL ready .sql文件。
我正在阅读的文件中的一行看起来像:
1 John Smith Developer http://twiiter.com/johns Chicago, IL
到目前为止我的Python脚本:
import sys
fwrite = open('d:/icm_db/wp_sql/wp.users.sql','w')
fread = open('d:/icm_db/users.txt','r')
for line in fread:
print line;
fread.close()
fwrite.close()
如何“破坏”每一行,以便我可以访问每一栏并开展业务?
我需要为每行读取生成多个MYSQL插入语句。所以......对于每一行读取,我都会产生类似的东西:
INSERT INTO `wp_users` (`ID`, `user_login`, `user_name`)
VALUES (line[0], 'line[2]', 'line[3]');
答案 0 :(得分:9)
虽然这很容易实现,但使用csv模块会变得更容易。
>>> import csv
>>> reader = csv.reader(open('C:/www/stackoverflow.txt'), delimiter='\t')
>>> for row in reader:
... print row
...
['1', 'John Smith', 'Developer', 'http://twiiter.com/johns', 'Chicago, IL']
['2', 'John Doe', 'Developer', 'http://whatever.com', 'Tallahassee, FL']
另外,正如所指出的,Python中不需要分号。试着戒掉这个习惯:))
答案 1 :(得分:1)
了解确切的列数有助于自我记录您的代码:
fwrite = open("d:/icm_db/wp_sql/wp.users.sql","w")
for line in open("d:/icm_db/users.txt"):
name, title, login, location = line.strip().split("\t")
# Double up on those single quotes to avoid nasty SQL!
safe_name = name.replace("'","''")
safe_login = name.replace("'","''")
# ID field is primary key and will auto-increment
fwrite.write( "INSERT INTO `wp_users` (`user_login`, `user_name`) " )
fwrite.write( "VALUES ('%s','%s');\n" % (safe_name,safe_login) )
答案 2 :(得分:0)
你可能想要的是这样的:
data=line.split("\t")
它会给你一个很好的序列对象来使用。
(顺便说一句,Python中不需要分号。这里有一个:print line;
)
正如Dave指出的那样,这可能会在那里留下一个换行符。在拆分之前调用strip(),就像这样:line.strip().split("\t")
答案 3 :(得分:0)
Python标准库有一个CSV (comma separated value) file reading and writing模块,可以使用像您这样的选项卡分隔文件。这项任务可能有点过头了。
答案 4 :(得分:0)
fwrite = open('/home/lyrae/Desktop/E/wp.users.sql','a')
fread = open('/home/lyrae/Desktop/E/users.txt','r')
for line in fread:
line = line.split("\t")
fwrite.write("insert into wp_users ( ID, user_login, user_name ) values (%s, '%s', '%s')\n" % (line[0], line[1], line[2]))
fread.close()
fwrite.close()
假设users.txt为:
1 John Smith Developer http://twiiter.com/johns Chicago, IL
2 Billy bob Developer http://twiiter.com/johns Chicago, IL
3 John Smith Developer http://twiiter.com/johns Chicago, IL
wp.users.sql将如下所示:
insert into wp_users ( ID, user_login, user_name ) values (1, 'John Smith', 'Developer')
insert into wp_users ( ID, user_login, user_name ) values (2, 'Billy bob', 'Developer')
insert into wp_users ( ID, user_login, user_name ) values (3, 'John Smith', 'Developer')
假设只有1个标签分隔了id,name,position