2017-02-19 24 views
2

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

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

N = ['19','85','45','14'] 
file = open("DICTIONARY", "r") 
my_sentence = #????????? 

print my_sentence 
+0

мне нужно тянуть линии 19, 85, 45 и 14, а затем распечатать их в одной строке – user7451333

ответ

1

Если ваш DICTIONARY не является слишком большим (т.е. может соответствовать вашей памяти):

N = [19,85,45,14] 

with open("DICTIONARY", "r") as f: 
    words = f.readlines() 

my_sentence = " ".join([words[i].strip() for i in N]) 

EDIT: небольшое уточнение, исходное сообщение не использовать пространство, чтобы присоединиться к словам, я изменил совместное де включить его. Вы также можете использовать ",".join(...), если вам нужно отделить слова запятой или любым другим разделителем, который вам может понадобиться. Кроме того, имейте в виду, что этот код использует нуля индекс строки, поэтому первая строка Вашего DICTIONARY будет 0, то второй будет 1, и т.д.

UPDATE:: Если ваш словарь слишком велик для вашего или вы просто хотите потреблять как можно меньше памяти (если это так, почему вы в первую очередь отправляетесь на Python?;)), вы можете «извлечь» слова, которые вас интересуют:

N = [19, 85, 45, 14] 

words = {} 
word_indexes = set(N) 
counter = 0 
with open("DICTIONARY", "r") as f: 
    for line in f: 
     if counter in word_indexes: 
      words[counter] = line.strip() 
     counter += 1 

my_sentence = " ".join([words[i] for i in N]) 
+0

моего список N это строка и я не могу редактировать это ... так что теперь он дает мне следующее:, my_sentence = "" .join ([слова [i] для i в wordNumbers]) TypeError: строковые индексы должны быть целыми числами, а не str – user7451333

+0

Я вытягиваю список из файл с использованием следующих: open («my_random_list», «r») в качестве файла: data = file.read() N = data.rstrip(). split ("\ n") – user7451333

+0

Почему вы не можете отредактировать его? Вы можете создать из него временный целочисленный список, если необходимо: 'N_fixed = [int (i) для i в N]' и использовать его вместо этого. И если вы не используете второй код с памятью, просто используйте 'words [int (i)]' вместо 'words [i]' ... – zwer

1

вы можете использовать linecache.getline, чтобы получить конкретные номера строк вы хотите:

import linecache 
sentence = [] 
for line_number in N: 
    word = linecache.getline('DICTIONARY',line_number) 
    sentence.append(word.strip('\n')) 
sentence = " ".join(sentence) 
1

Вот простой один с более основным подходом:

n = ['2','4','7','11'] 
file = open("DICTIONARY") 
counter = 1     # 1 if you're gonna count lines in DICTIONARY 
           # from 1, else 0 is used 
output = "" 
for line in file: 
    line = line.rstrip()  # rstrip() method to delete \n character, 
           # if not used, print ends with every 
           # word from a new line 
    if str(counter) in n: 
     output += line + " " 
    counter += 1 
print output[:-1]    # slicing is used for a white space deletion 
           # after last word in string (optional)