Python文件读取+写入

时间:2009-05-30 03:21:25

标签: python file

我正在努力将数据库从自定义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]');

5 个答案:

答案 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