2017-02-09 3 views
1

Не знаете, как начать работу. У меня есть много файлов с разделителями табуляции, которые я хочу, чтобы их можно было поместить в базу данных. Однако сложная часть заключается в том, что таблица не выложена наилучшим образом. Например, родительская строка будет обозначена буквой (D), тогда строки под этим родителем соответствуют родительскому элементу, пока не будет перечислена следующая строка DИтерация через вложенную таблицу/spreadhseet

В идеале я хочу, чтобы все дочерние строки в той же строке, что и родитель. Для того, чтобы поместить его в результатах базы данных и запросов (если есть другой способ)

Вот ссылка на данные: http://www.gasnom.com/ip/vector/archive.cfm?type=4

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

http://www.vector-pipeline.com/Informational-Postings/Index-of-Customers.aspx

ответ

0

Я думаю, что это работает. Он просто добавляет список «дочерних» строк в конце каждой «родительской» строки в списке «родительских» строк.

customer_file = open('index_of_customers.txt', 'r') # you should of course do more try-except stuff in your script 
database = []          # all data ends up here 
for each_line in customer_file:      # reads one line at a time 
    each_line = each_line.strip('\n')    # removes newlines 
    each_line = each_line.split('\t')    # split the line of text into a list. This should save any empty columns aswell 
    if each_line[0] == 'D':       # if line starts with a single D 
     each_line.append([])      # add a list for the other lines at the end of the D line 
     database.append(each_line)    # add a D line to the "database" as a list 
    else:           # if line don't start with a single D 
     if len(database):       # the first line is not a D line, so we need to check if the database is empty to avoid errors 
      database[-1][-1].append(each_line)  # add the line to the last D line's list. 
for each_D_line in database:      # prints out the database in an ugly way 
    print(str(each_D_line[:-1]))     # first the D lines 
    for each_other_line in each_D_line[-1]: 
     print('\t' + str(each_other_line))  # then each other line