2009-05-30 29 views
5

Özel bir MSSQL CMS'den MYSQL - WordPress'e bir veritabanında aktarım üzerinde çalışıyorum. Python'u \t belirtilen sütunlarla ve satır başına bir satır ile bir txt dosyası okumak için kullanıyorum.Python Dosyası Okuma + Yazma

Bu dosyayı okuyacak bir Python komut dosyası yazmaya çalışıyorum (yayın) ve [en sonunda] ekleme ifadeleri içeren bir MYSSQL hazır .sql dosyası oluşturmaya çalışıyorum.

bugüne kadar
1 John Smith Developer http://twiiter.com/johns Chicago, IL 

Benim Python komut:

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

ben "hareket ederler" her satırı ben erişebilir böylece Nasıl her

okuyorum dosyasındaki bir satır gibi görünür sütun ve üzerinde iş yapmak?

Okuduğum her satırda birden çok MYSQL ek ifadesi oluşturmam gerekiyor. data=line.split("\t")
Size çalışmak için güzel bir dizi nesnesi vereceğiz: Ne muhtemelen istediğiniz böyle bir şey olduğunu

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

cevap

9

Bu kolayca yapılabilir olsa da, csv modülüyle daha kolay hale gelir. Ayrıca belirtildiği gibi Python'da noktalı virgüllere gerek yoktur. Sütunların tam sayısı öz kodunuzu belgelemek yardımcı olur bilerek bu alışkanlığı :)

+2

... ve Python'da golf oynamaya başladığınızda bu alışkanlığı kazanın: | – Dave

0

: Yani ... Her satır okumak için, şöyle bir şey üretmek istiyorum.
(Bu arada, Python'da noktalı virgüllere gerek yok. Burada bir tane var: print line;)

Dave'in belirttiği gibi, bu bir satır içi bırakabilir. Bölme işleminden önce şeridi çağırın(): line.strip().split("\t")

+1

Bu, son alana yeni bir satır bırakabilir. – Dave

+0

Sonra ne hakkında: line.strip(). Bölünmüş ("\ t") –

+0

Sadece yeni satır değil, tüm lider ve sondaki boşlukları yener. Bu bir sorun olabilir veya olmayabilir. – Dave

1

tekme deneyin:

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

varsayarsak users.txt geçerli:

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 şöyle görünecektir:

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 yalnızca 1 sekmesi, kimliği, adı ve konumu birbirinden ayırır.