неділя, 29 листопада 2009 р.

Лабораторна робота №5

Доброго вечора! Підкажіть, будь ласка, як закінчити отаке завдання:

Створіть файл, який буде містити слова та їх частоту записані в окремих
рядках
через пробіл ( fuzzy 53). Прочитайте цей файл використовуючи
open(filename).readlines().
Розділіть кожну стрічку на дві частини використовуючи split(),
і перетворіть число в ціле значення використовуючи int().
Результат повинен бути у вигляді списку: [['fuzzy', 53], ...].

1. Початок, думаю, мав би бути приблизно такий:
from __future__ import division
import nltk, re, pprint
f = open('f.txt')
p=f.readlines()
print p
['word 34\n', 'day 13\n', 'read 45\n', 'free 15']
p=''word 34\n day 13\n read 45\n free 15'
words=p.split()
words
['word', '34', 'day', '13', 'read', '45', 'free', '15']
2. А перетворити число в ціле значення мені не вдається.
Пробувала робити цикл, в якому перевіряла чи стрічка складається з цифр, і
їх записати окремо, але то не то...

4 коментарі:

  1. Після стрічки
    p=f.readlines()
    я дивлюся тип р і дивлюся скільки елементів має р (4)

    Відразу все стає зрозуміло (кожна стрічка окремий елемент)
    Треба в циклі перебрати елементи ділити їх на окремі стрічки і перетворювати другу
    стрічку в цілі значення.
    Після декількох підготовчих спроб:
    for i in p:
    c=i.split()
    a.append(c[0])
    a.append(int(c[1]))
    a
    ['word', 34, 'day', 13, 'read', 45, 'free', 15]
    for i in p:
    c=i.split()
    a.append([c[0],int(c[1])])
    a
    ['word', 34, 'day', 13, 'read', 45, 'free', 15, ['word', 34], ['day', 13], ['read', 45], ['free', 15]]
    for i in p:
    a.append([i.split()[0],int(i.split()[1])])
    a
    ['word', 34, 'day', 13, 'read', 45, 'free', 15, ['word', 34], ['day', 13], ['read', 45], ['free', 15], ['word', 34], ['day', 13], ['read', 45], ['free', 15]]
    a=[]
    for i in p:
    a.append([i.split()[0],int(i.split()[1])])
    a
    [['word', 34], ['day', 13], ['read', 45], ['free', 15]]
    a=[]
    [a.append([i.split()[0],int(i.split()[1])]) for i in p]
    [None, None, None, None]
    a.append([i.split()[0],int(i.split()[1])]) for i in p
    SyntaxError: invalid syntax
    отримую:
    (a.append([i.split()[0],int(i.split()[1])]) for i in p)
    a
    [['word', 34], ['day', 13], ['read', 45], ['free', 15]]

    ВідповістиВидалити
  2. А як вам такий варіант:

    from __future__ import division
    import nltk, re, pprint
    f = open('1.txt')
    p=f.readlines()
    p
    ['tree 45\n', 'book 15\n', 'web 5\n']
    t=[]
    for a in p:
    w,c=a.split(' ')
    k=c[0:len(c)-1]
    tx=(w,int(k))
    t.append(tx)
    t
    [('tree', 45), ('book', 15), ('web', 5)]

    ВідповістиВидалити
  3. За умовою задачі результат повинен бути у вигляді списку списків: [['fuzzy', 53], ...].
    А у Вас список кортежів [('tree', 45), ('book', 15), ('web', 5)].

    ВідповістиВидалити
  4. А такий:

    import nltk, re, pprint
    lab_5_file = open("C:\lab_5_file.txt").readlines()
    results = [(item.strip()).split() for item in lab_5_file]
    results2 = [[item[0], int(item[1])] for item in results]
    print results2

    ВідповістиВидалити