2015-07-08 2 views
-2

Я пытаюсь читать данные в Python один способ, которым я сделать это как этотЧтение данных в python?

states = """ 
     Alabama 
     Alberta 
     Alaska 
     Arizona 
     Arkansas 
     Bob 
     Tom 
     Ted 
     William 
     """ 
states_list = [w.strip().lower() for w in states.splitlines() if w] 

Теперь, если я пытаюсь читать подобные данные из файла его не работает. Я делаю это, как этого

file1 = open('dictionary_file.txt','r') 
data = file1.read() 
file1.close() 

, а затем перебрать элементы в данных

Вот весь код, связанная с ним часть в конце.

def _get_child_branches(tree): 
""" 
This method return all the branches of the tree 
""" 
return tree[1:] 


def _get_child_branch(tree, c): 
""" 
This method returns the specific branch of the tree given the character 
""" 
for branch in _get_child_branches(tree): 
    if branch[0] == c: 
     return branch 

return None 


def _retrive_branch(k, tree): 
""" 
This method is used for getting the branch for a given word 
""" 
if not k: 
    return None 

for c in k: 
    child_branch = _get_child_branch(tree, c) 
    if not child_branch: 
     return None 
    tree = child_branch 

return tree 


def _is_tree_bucket(bucket): 
if len(bucket) != 2: 
    return False 

return type(bucket[1]) is tuple 


def _get_bucket_key(bucket): 
if not _is_tree_bucket(bucket): 
    return None 

return bucket[1][0] 


def has_key(k, tree): 
""" 
To check if the tree containes the keyword 
""" 
return _retrive_branch(k, tree) is not None 


def retree_val(k, tree): 
key_tuple = _retrive_branch(k, tree) 
if not key_tuple: 
    return None 

return key_tuple[1] 


def insert_key(key, v, tree): 
""" 
Insert a (key, value) pair into tree 
""" 
if not key or has_key(key, tree): 
    return 

for char in key: 
    branch = _get_child_branch(tree, char) 
    if not branch: 
     new_branch = [char] 
     tree.append(new_branch) 
     tree = new_branch 
    else: 
     tree = branch 
tree.append((key, v)) 


def start_with_prefix(prefix, tree): 
""" 
Find words start with prefix 
""" 
branch = _retrive_branch(prefix, tree) 
if not branch: 
    return [] 

prefix_list = [] 
q = branch[1:] 
while q: 
    curr_branch = q.pop(0) 
    if _is_tree_bucket(curr_branch): 
     prefix_list.append(_get_bucket_key(curr_branch)) 
    else: 
     q.extend(curr_branch[1:]) 

return prefix_list 






if __name__ == "__main__": 
tree = [[]] 
file1 = open('dictionary_file.txt','r') 
data = file1.read().split('\n') 
file1.close() 
states = """ 
     Alabama 
     Alberta 
     Alaska 
     Arizona 
     Arkansas 
     Bob 
     Tom 
     Ted 
     William""" 
states_list = [w.strip().lower() for w in states.splitlines() if w] 
print(states_list) 
print(states) 
for state in data: 
    insert_key(state, True, tree) 


print start_with_prefix("a", tree) 
+0

И ваш вопрос? –

+0

Не следует ли использовать тройные кавычки только для docstrings? – Malonge

ответ

-1

.split('\n') будет решать это.

file1 = open('dictionary_file.txt','r') 
data = file1.read().split('\n') 
file1.close() 
for i in data: 
    print i 
+0

Nah ... Позвольте мне поставить весь код не слишком большим ... – user2939685

1

Пожалуйста, просто прочитайте Reading and writing files.

with open('dictionary_file.txt', 'r') as f: 
    lines = f.readlines() 

states_list = [w.strip().lower() for w in lines if w] 

Edit: Я понял, что нет необходимости использовать readlines() здесь. Просто используйте ответ @ Padraic.

+0

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

+0

. Я думаю, что есть проблема с тройными цитатами будучи там .... – user2939685

+0

@ user2939685 Он должен работать. Какая ошибка вы получаете? Однако, я думаю, вы должны пойти с ответом Падрейка, который более изящный. – Sait

2

Просто замените splitlines с file object и перебирать, что:

with open('dictionary_file.txt','r') as f: 
    lines =[w.strip().lower() for w in f if w] 

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

На стороне примечания, вам нужно if w в вашем коде разделенных линий, когда вы добавляете новую строку перед вашими линиями и после этого, начинаете строку с цитаты и заканчиваете ее цитатой, и вы не получите никаких пустых строк:

states = """Alabama 
    Alberta 
    Alaska 
    Arizona 
    Arkansas 
    Bob 
    Tom 
    Ted 
    William""" 
+0

Думаю, последний абзац для меня. : P – Sait

+0

@Sait, я всегда говорю это, ничего личного! Так много людей, начинающих всегда называть readlines или читать, а затем либо разделить чтение на список строк, либо перебирать строки чтения, выполняя работу, которую они могут выполнять только для итерации над файловым объектом. –

+0

Согласен. Нет необходимости в 'readlines()'. +1 – Sait

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