Чтение и запись файла Python - PullRequest
5 голосов
/ 30 мая 2009

Я работаю над переносом базы данных с пользовательской MSSQL CMS на MYSQL - Wordpress. Я использую Python для чтения текстового файла с \t выделенными столбцами и одной строкой в ​​строке.

Я пытаюсь написать скрипт Python, который будет читать этот файл (fread) и [в конце концов] создавать готовый 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]');

Ответы [ 5 ]

9 голосов
/ 30 мая 2009

Хотя это легко выполнимо, с модулем 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 голос
/ 30 мая 2009

Знание точного количества столбцов помогает самостоятельно документировать ваш код:

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 голосов
/ 30 мая 2009
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 вкладка отделяет идентификатор, имя, позицию

0 голосов
/ 30 мая 2009

В стандартной библиотеке Python есть модуль для чтения и записи файла CSV (значение, разделенное запятыми) , который можно настроить для работы с файлами, разделенными табуляцией, такими как ваш. Вероятно, это излишне для этой задачи.

0 голосов
/ 30 мая 2009

Что вы, вероятно, хотите, это что-то вроде этого: data=line.split("\t")
Это даст вам хороший объект последовательности для работы.
(Кстати, в Python нет необходимости использовать точки с запятой. Здесь есть одна: print line;)

Как указал Дейв, это может привести к появлению новой строки. Вызовите strip () на линии перед разделением, например: line.strip().split("\t")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...