2016-08-12 1 views
0

Я пытаюсь извлечь необработанные данные из текстового файла и после обработки необработанных данных я хочу экспортировать его в другой текстовый файл. Ниже приведен код python, который я написал для этого процесса. Для этой цели я использую пакет «petl» в python 3. 'locations.txt' - это файл необработанных данных.Экспорт данных из python в текстовый файл с использованием пакета petl в python

import glob, os 
from petl import * 


class ETL(): 

    def __init__(self, input): 
     self.list = input 


    def parse_P(self): 
     personids = None 
     for term in self.list: 
      if term.startswith('P'): 
       personids = term[1:] 
     personid = personids.split(',') 

     return personid 

    def return_location(self): 
     location = None 
     for term in self.list: 
      if term.startswith('L'): 
       location = term[1:] 
     return location 

    def return_location_id(self, location): 
     location = self.return_location() 
     locationid = None 


    def return_country_id(self): 
     countryid = None 
     for term in self.list: 
      if term.startswith('C'): 
       countryid = term[1:] 

     return countryid 

    def return_region_id(self): 
     regionid = None 
     for term in self.list: 
      if term.startswith('R'): 
       regionid = term[1:] 

     return regionid 

    def return_city_id(self): 
     cityid = None 
     for term in self.list: 
      if term.startswith('I'): 
       cityid = term[1:] 
     return cityid 

print (os.getcwd()) 
os.chdir("D:\ETL-IntroductionProject") 
print (os.getcwd()) 
final_location = [['L','P', 'C', 'R', 'I']] 

new_location = fromtext('locations.txt', encoding= 'Latin-1') 
stored_list = [] 
for identifier in new_location: 
    if identifier[0].startswith('L'): 
     identifier = identifier[0] 
     info_list = identifier.split('_') 
     stored_list.append(info_list) 

for lst in stored_list: 
    tabling = ETL(lst) 
    location = tabling.return_location() 
    country = tabling.return_country_id() 
    city = tabling.return_city_id() 
    region = tabling.return_region_id() 
    person_list = tabling.parse_P() 
    for person in person_list: 
     table_new = [location, person, country, region, city] 
     final_location.append(table_new) 

totext(final_location, 'l1.txt') 

Однако, когда я использую функцию «totext» из petl, это вызывает меня «Ошибка утверждения».

AssertionError: template is required I am unable to understand what the fault is. Can some one please explain the problem I am facing and what I should be doing ?

ответ

0

Параметр шаблона функции toext не является факультативным не формат по умолчанию, как строки написаны в этом случае, вы должны предоставить шаблон. Проверьте файл doc для примера здесь: https://petl.readthedocs.io/en/latest/io.html#text-files

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

table_new_template = "{L} {P} {C} {R} {I}" totext(final_location, 'l1.txt', template=table_new_template)

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