2016-01-22 2 views
1

У меня есть файл X_true, который состоит из предложений, подобные этим:Переписывая код с массивом

evid emerg interview show done deal 
munich hamburg train crash wednesday first gener ice model power two electr power locomot capac 759 passeng 
one report earlier week said older two boy upset girlfriend broken polic confirm 
jordan previous said 

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

['evid emerg interview show done deal', 
'munich hamburg train crash wednesday first gener ice model power two electr power locomot capac 759 passeng', 
'one report earlier week said older two boy upset girlfriend broken polic confirm', 
'jordan previous said'] 

Ранее при работе с файлом, это код, который я использовал:

def run(command): 
    output = subprocess.check_output(command, shell=True) 
    return output 
row = run('cat '+'/Users/mink/X_true.txt'+" | wc -l").split()[0] 

Теперь, когда я работал с X_true как массив, как я могу написать эквивалентную инструкцию для строки выше?

+2

Как выглядит «массив»? Это список строк? Вы хотите, чтобы каждая строка была собственной линией? Если да, то не было бы более эффективным получить длину списка вместо того, чтобы обрабатывать работу с 'wc'? – mgilson

+0

Почему вы выполняете разделение на целочисленное значение? – nu11p01n73R

+0

Позвольте мне угадать: вы хотите, чтобы функция давала вам количество строк в файле? – L3viathan

ответ

1

len (X_true_array), где X_true_array - это массив содержимого файла ur, представленный массивом.

потому что перед этим вы используете wc -l, чтобы получить количество строк ur-файла, и здесь u может представлять количество строк через счетчик элемента массива.

1

Итак, я правильно понимаю это, вы просто хотите прочитать в файле и сохранить каждую строку как элемент массива?

X_true = [] 
with open("X_true.txt") as f: 
    for line in f: 
     X_true.append(line.strip()) 

Другой вариант (спасибо @roeland):

with open("X_true.txt") as f: 
    X_true = list(map(str.strip, f)) 
+1

Я думаю, вы можете написать 'X_true = list (f)' вместо этого цикла. – roeland

+0

@roeland Тогда вам придется использовать 'map' или что-то в этом роде, чтобы избавиться от' \ n ', но да, хорошая точка. – L3viathan

+0

Это отличный ответ. Чтобы пойти немного дальше, скажем, OP хочет, чтобы python разбивал строку, а не делал ее из файла (что было бы неправильным выбором). Вы должны использовать 'my_string.split (" \ n ")' или что угодно, чтобы разбить предложения, которые вы хотите сохранить. Если бы я хотел разделить предложение на слова, я бы сделал это следующим образом: 'hello world.split (" ")' , который возвращает: '[" hello "," world] ' –

1

Попробуйте это:

Использование readlines

X_true = open("x_true.txt").readlines() 

read Использование:

X_true = open("x_true.txt").read().split("\n") 

List comprehension Использование:

X_true = [line.rstrip() for line in open("x_true.txt")] 
1
with open(X_true.txt) as f: 
    X_true= f.readlines() 

или зачистным символ новой строки:

X_true= [line.rstrip('\n') for line in open(X_true.txt)] 

См Input and Ouput:

0
with open(X_true.txt) as f: 
    array_of_lines = f.readlines() 

array_of_lines будет выглядеть как у наш пример выше. Примечание: в конце каждой строки массива все еще будут символы новой строки. Они могут быть удалены с помощью string.strip(), если это проблема.

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