2017-02-15 4 views
0

Мой текстовый файл состоит в следующем:Как найти фразы в текстовом файле

123 Numbers 4.5 
456 Words 6.7 
789 Sentences 8.9 

И мой код это:

s = open('test.txt', 'r') 
file = s.read() 
numbers, words, decimals = [], [], [] 

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

with open('test.txt', 'r') as f: 
    for line in f: 
     numbers, words, decimals = f.split(","), f.split(","), f.split(",") 

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

AttributeError: '_io.TextIOWrapper' object has no attribute 'split' 

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

+0

Это должно быть 'line.split (", ")' вместо 'f.split (", ")' –

+0

Я просто пробовал это, и хотя он избавился от этой ошибки, он все еще не делает что Я хотел это сделать. Если бы я печатал числа, слова и десятичные знаки, каждый список содержит только один элемент, являющийся только последней строкой. Итак, каждый список содержит: «789 предложений 8.9». Кроме того, это все одно значение в списке. Я хочу, чтобы список чисел содержал все числа в начале строки, слова, содержащие все слова в середине, и десятичные числа, чтобы содержать все десятичные числа в конце. Каждый из них также должен быть отдельным значением в списке. – XYZ

+0

, вы должны добавить эти значения в список. Use 'numbers.append (line.split (", ") [0]), words.append (line.split (", ") [1]), decimals.append (line.split (",") [2]) ' –

ответ

2

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

numbers, words, decimals = [], [], [] 
with open('test.txt', 'r') as f: 
    for line in f: 
     number, word, decimal = line.split() 
     numbers.append(number) 
     words.append(word) 
     decimals.append(decimal) 
+0

Каждое десятичное число будет иметь завершающую новую строку, потому что' line' включает конечную новую строку. Измените 'line.split (" ")' на 'line.split()', и конечный пробел отпадет. –

+0

@StevenRumbalski Хорошая точка, спасибо. –

0

Вы хотите разделить каждую строку на поля

with open('test.txt', 'r') as f: 
    for line in f: 
     number, word, decimal = line.split() # split on whitespace as indicated by your example file which does not use commas 
     numbers.append(int(number)) 
     words.append(word) 
     decimals.append(float(decimal)) 

Если вы действительно намерены использовать Ral десятичные, чем вы должны использовать decimal.Decimal вместо float.

Если вы каким-либо образом не ограничены, я бы рекомендовал использовать некоторую библиотеку, предназначенную для работы с табличными данными, например. панды, где все это было бы просто

import pandas as pd 
df = pd.read_table('test.txt', delim_whitespace=True) 
0

Это должно быть line.split и не f.split, так как вы разделив линию, а не файл. Кроме того, вы разделяете свой файл запятыми, но файл примера разделяется пробелами? Если он разделен пробелами, вам необходимо использовать line.split(" "). Кроме того, используя with open() as f, вам не нужно открывать файл заранее или закрыть его после того, как он сортирует это для вас. Кроме того, вы сохраняли весь массив разделенных строк для каждой переменной и каждый раз перезаписывали их. Полный код:

numbers, words, decimals = [], [], [] 
with open('test.txt', 'r') as f: 
    for line in f: 
     numbers.append(line.split(" ")[0]) 
     words.append(line.split(" ")[1]) 
     decimals.append(line.split(" ")[2]) 
1
with open('test.txt', 'r') as f: 
    numbers, words, decimals = zip(*(line.split() for line in f)) 
0

Если я правильно понимаю ваш вопрос, что вы должны смотреть на самом деле nltk , Это даст вам представление о том, как маркировать текст, основанный либо на словах, либо на предложениях. Остальное должно быть легко.

0
a,b,c=[],[],[] 
with open('new.txt', 'r') as f: 
for line in f: 
    m=line.split() 
    a.append(m[0]) 
    b.append(m[1]) 
    c.append(m[2]) 
print a,b,c 

Проверьте, действительно ли это то, чего вы хотели достичь.