2015-10-31 9 views
0

У нас была информация о наших клиентах, распространяемая по 4 устаревшим системам и впоследствии перенесла все данные в 1 новую систему.Преобразование текстового файла в список

Наши клиенты ранее имели разные номера счетов в каждой системе, и мне нужно проверить, какой номер учетной записи был использован в новой системе, которая поддерживает вызовы API.

У меня есть текстовый файл, содержащий все возможные номера счетов, структурированных так:

30000001, 30000002, 30000003, 30000004 
30010000, 30110000, 30120000, 30130000 
34000000, 33000000, 32000000, 31000000 

Где каждая строка представляет все старые номера счетов для каждого клиента.

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

[['30000001', '30000002', '30000003', '30000004'], ['30010000', '30110000', '30120000', '30130000'], ['34000000', '33000000', '32000000', '31000000']] 

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

import json 
from urllib2 import urlopen 

def read_file(): 
    lines = [line.rstrip('\n') for line in open('customers.txt', 'r')] 
    return lines 

def verify_account(*customers): 
    verified_accounts = [] 
    for accounts in customers: 
     for account in accounts: 
      url = api_url + account 
      response = json.load(urlopen(url)) 
      if response['account_status'] == 1: 
       verified_accounts.append(account) 
       break 

    return verified_accounts 

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

['30000001, 30000002, 30000003, 30000004', '30010000, 30110000, 30120000, 30130000', '34000000, 33000000, 32000000, 31000000'] 

Кроме того, есть более Pythonic способ использования списковых или похож на итерацию и проверить номера счетов. Кажется, слишком много вложенности используется для Python?

Последний вопрос, который стоит упомянуть, заключается в том, что для проверки есть более 255 клиентов, и почти 1000. Смогу ли я передать более 255 параметров в функцию?

+0

использование CSV парсер. – hjpotter92

+1

Жаль, что люди, которые создали ваш новый API, не смогли дать вам список новых номеров учетных записей ... FWIW, как только вы собрали новые номера учетных записей, вам может понравиться создать «dict» со старым номера счетов в качестве ключей и номер нового счета в качестве значения. Вы можете сохранить этот dict как JSON или файл рассола. –

+0

@ PM2Ring Или используйте базу данных вместо этого :) –

ответ

1

Как насчет этого?

with open('customers.txt','r') as f: 
    final_list=[i.split(",") for i in f.read().replace(" ","").splitlines()] 

print final_list 

Выход:

[['30000001', '30000002', '30000003', '30000004'], 
['30010000', '30110000', '30120000', '30130000'], 
['34000000', '33000000', '32000000', '31000000']] 
+1

Это почти работает.Я получаю этот вывод: ['30000001', '30000002', '30000003', '30000004'] есть способ удалить ведущее пространство? – Ron

+0

@Ron, см. Обновленный ответ –

+0

Это намного лучше! Было бы интересно узнать, быстрее ли читать весь файл в ОЗУ и заменить все пробелы одним ударом, или прочитать его по очереди и удалить пробелы слово за словом, как в ответе Кевина. –

2

Как насчет этого? Просто используйте str.split():

l = [] 
with open('customers.txt', 'r') as f: 
    for i in f: 
     l.append([s.strip() for s in i.split(',')]) 

Выход:

[['30000001', '30000002', '30000003', '30000004'], 
['30010000', '30110000', '30120000', '30130000'], 
['34000000', '33000000', '32000000', '31000000']] 
+1

split using ',' (космос включен) – hjpotter92

+0

@ hjpotter92 Спасибо, отредактировал :) –

+0

@ PM2Ring Упс, я не знаю, что я делаю: P –

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