2009-05-30 36 views
5

Tôi đang làm việc để chuyển qua cơ sở dữ liệu từ CMS MSSQL tùy chỉnh tới MYSQL - Wordpress. Tôi đang sử dụng Python để đọc một tệp txt với \t các cột được mô tả và một hàng trên mỗi dòng.Đọc tệp Python + Viết

Tôi đang cố gắng viết một tập lệnh Python sẽ đọc tệp này (fread) và [cuối cùng] tạo tệp .sql có sẵn MYSSQL với các câu lệnh chèn.

Một dòng trong file tôi đang đọc trông giống như sau:

1 John Smith Developer http://twiiter.com/johns Chicago, IL 

My Python script cho đến nay:

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

Làm thế nào tôi có thể "nổ tung" mỗi dòng để tôi có thể truy cập vào từng cột và kinh doanh trên đó?

Tôi cần tạo nhiều câu lệnh chèn MYSQL trên mỗi dòng tôi đọc. Vì vậy ... đối với từng dòng đọc, tôi muốn tạo ra một cái gì đó như:

INSERT INTO `wp_users` (`ID`, `user_login`, `user_name`) 
VALUES (line[0], 'line[2]', 'line[3]'); 

Trả lời

9

Mặc dù điều này có thể dễ dàng thực hiện được, việc này trở nên dễ dàng hơn với mô-đun 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'] 

Ngoài ra, như đã chỉ ra, dấu chấm phẩy không cần thiết trong Python. Cố gắng kick rằng thói quen :)

+2

... và lấy lại thói quen đó khi bạn bắt đầu chơi gôn bằng Python: | – Dave

0

Những gì bạn có thể muốn là một cái gì đó như thế này: data=line.split("\t")
Nó sẽ cung cấp cho bạn một đối tượng chuỗi thoải mái để làm việc với.
(Nhân tiện, không cần dấu chấm phẩy trong Python. Có một ở đây: print line;)

Như Dave đã chỉ ra, điều này có thể để lại một dòng mới trong đó. Dải cuộc gọi() trên dòng trước khi tách, như vậy: line.strip().split("\t")

+1

Điều này có thể để lại một dòng mới trong trường cuối cùng. – Dave

+0

Sau đó, những gì về: line.strip(). Split ("\ t") –

+0

Ăn tất cả khoảng trống đầu và cuối, không chỉ là dòng mới. Điều này có thể hoặc không có thể là một vấn đề. – Dave

0

Thư viện chuẩn Python có thể làm việc trên các tệp được phân tách bằng tab giống như tệp của bạn. Đó có lẽ là quá mức cần thiết cho nhiệm vụ này.

1

Biết chính xác số lượng cột giúp tự ghi mã của bạn:

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

Giả sử users.txt là:

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 sẽ trông giống như:

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 ming chỉ 1 tab tách id, tên, vị trí

Các vấn đề liên quan