2012-01-12 3 views
0

У меня есть tab-delimited txt file со строками, разделенными вкладками и строками, разделенными символами новой строки. Это то, что она на самом деле выглядит следующим образом:Вставить значения с табуляцией в базу данных

476502291\t\tLF3139812164\t\tTitle 1\tKids & Family\nGRAV_2011\t\tThe Full Picture\tIndependent\n [...etc...]

Обратите внимание, что иногда значения разделены двумя вкладками вместо одного.

мне нужно вставить это в таблицу MySQL, которая должна привести к следующим:

ID    title    genre 
476502291  Title 1    Kids & Family 
GRAV_2011  The Full Picture Independent 

Как бы я прочитал вкладку разделенных текстовый файл и запустить for петлю для того, чтобы вставить значения в таблица с именем vendor с использованием MySQLdb?

>>> import MySQLdb 
>>> conn = MySQLdb.connect (host = "localhost", 
          user = "me", 
          passwd = "password", 
          db = "my-db") 
>>> cursor = conn.cursor() 
>>> # for loop # how to read from the txt file to insert it as required? 
>>>  # cursor.execute (INSERT...) 
>>> conn.commit() 
>>> conn.close() 
+0

«В основном у меня проблемы с выполнением цикла« Какие проблемы? Commit обычно заканчивается после завершения всей работы. Это ваш вопрос? Где совершить? Или вы хотите знать, как читать CSV-файл с разделителями вкладок? Вы еще читали модуль Python 'csv'? –

+0

Благодарю вас за ответ. последний. – David542

+0

Есть ли пустые поля? То есть, '\ t \ t' всегда эквивалентно' \ t', или же '\ t \ t' иногда означает« разделитель, пустое поле, разделитель »? – ruakh

ответ

1

Шаг 1. Прочтите модуль csv. http://docs.python.org/library/csv.html. Это делает то, что вы хотите.

with open('your_data_file.dat','r') as source: 
    rdr= csv.reader(source, delimiter='\t', quotechar='') 
    for row in rdr: 
     # you have your columns with which to do your insert. 
conn.commit() 

Шаг 2. Читайте также о менеджерах контекста.

from contextlib import closing 

with open('your_data_file.dat','r') as source: 
    rdr= csv.reader(source, delimiter='\t', quotechar='') 
    with closing(conn.cursor()) as cursor: 
     for row in rdr: 
      # you have your columns with which to do your insert. 
conn.commit() 

Это гарантирует, что курсоры и файлы будут правильно закрыты.

1

Пока ушки используются только в качестве разделителей в файле, вы должны быть в состоянии сделать что-то вроде этого:

import re 

# connect to MySQLdb 

with open(file_name) as f: 
    for line in f: 
     id, title, genre = re.split(r'\t+', line) 
     # execute INSERT statement 

Идея заключается в том, что вы всегда будете иметь две группы вкладок, одна между ID и заголовком, а другой между заголовком и жанром. С помощью re.split() на \t+ (один или несколько вкладок), вы получите список длины 3 с полями вы заинтересованы.

Если есть какая-либо строка в файле, которые не соответствуют этому формату, который вы должны добавить некоторые дополнительные возможно, что-то вроде строк data = re.split(r'\t+', line) и if len(data) == 3: перед распаковкой кортежа.

Редактировать: Это решение исходит из предположения, что у вас нет пустых полей, поэтому, если законно для строки иметь только идентификатор и жанр, но без названия это не сработает. Он по-прежнему будет работать, если у вас может быть заголовок, но нет идентификатора или жанра, если есть ведущие вкладки, когда идентификатор отсутствует и завершающие вкладки, когда жанр отсутствует.

0

импорт рег

подключения к MySQLdb

с открытым (имя_файла), а е: для линии в F: идентификатор, название, жанр = re.split (г '\ т +', линия) # выполнить инструкцию INSERT

 Смежные вопросы

  • Нет связанных вопросов^_^