2009-05-30 17 views
5

मैं एक कस्टम एमएसएसएलएल सीएमएस से MYSQL - वर्डप्रेस से डेटाबेस पर पोर्टिंग पर काम कर रहा हूं। मैं \t चित्रित कॉलम और प्रति पंक्ति एक पंक्ति के साथ एक txt फ़ाइल पढ़ने के लिए पायथन का उपयोग कर रहा हूं।पायथन फ़ाइल पढ़ें + लिखें

मैं एक पायथन स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो इस फ़ाइल (फ्रेड) को पढ़ेगा और [अंततः] एक MYSSQL तैयार .sql फ़ाइल डालने के साथ फाइलें तैयार करेगा।

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

मेरे अजगर स्क्रिप्ट अब तक::

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 सम्मिलन कथन उत्पन्न करने की आवश्यकता है। तो ... प्रत्येक पंक्ति पढ़ने के लिए, मैं की तरह कुछ उत्पन्न चाहते हैं: data=line.split("\t")
यह आप के साथ काम करने के लिए एक अच्छा अनुक्रम वस्तु देंगे:

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

इसके अलावा, जैसा कि बताया गया है, पाइथन में अर्धविराम की आवश्यकता नहीं है। कि आदत :)

+2

... और जब आप पाइथन में गोल्फ़िंग शुरू करते हैं तो उस आदत को वापस प्राप्त करें: | – Dave

0

क्या आप शायद चाहते हैं कुछ इस तरह है।
(वैसे, पायथन में अर्धविरामों की कोई आवश्यकता नहीं है। यहां एक है: print line;)

जैसा डेव ने बताया, यह वहां एक नई लाइन छोड़ सकता है। विभाजन से पहले लाइन पर कॉल स्ट्रिप(): line.strip().split("\t")

+1

अलग करता है यह अंतिम फ़ील्ड में एक नई लाइन छोड़ सकता है। – Dave

+0

फिर इसके बारे में: line.strip()। विभाजन ("\ t") –

+0

सभी अग्रणी और पिछली सफेद जगहों को खाती है, न केवल नई लाइन। यह एक समस्या हो सकती है या नहीं भी हो सकती है। – Dave

0

पायथन स्टैंडर्ड लाइब्रेरी में CSV (comma separated value) file reading and writing के लिए एक मॉड्यूल है जिसे आपके जैसे टैब से अलग फ़ाइलों पर काम करने के लिए बनाया जा सकता है। यह शायद इस काम के लिए अधिक है।

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। एसक्यूएल इस तरह दिखेगा:

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 टैब आईडी, नाम, स्थिति

संबंधित मुद्दे