2009-05-30 177 views
5

我正在从一个数据库从一个定制的MSSQL CMS移植到MYSQL - Wordpress。我正在使用Python读取一个带有\t划定的列和每行一行的txt文件。Python文件读取+写入

我正在尝试编写一个Python脚本,它将读取此文件(fread)并[最终]使用insert语句创建一个MYSSQL准备好的.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]'); 

回答

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中不需要分号。尝试踢这个习惯:)

0

你可能需要的是这样的: data=line.split("\t")
它会给你一个很好的序列对象一起工作。
(顺便说一句,在Python中不需要分号。这里有一个:print line;

正如Dave指出的那样,这可能会在那里留下换行符。在分割之前在线调用strip(),如下所示:line.strip().split("\t")

+1

这可能会在最后一个字段中留下换行符。 – Dave 2009-05-30 03:27:51

+0

那么怎么样:line.strip()。split(“\ t”) – 2009-05-30 03:28:50

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)) 
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') 

Assu明只有1个选项卡分隔ID,名称,位置