Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/33: Рейтинг темы: голосов - 33, средняя оценка - 4.79
 Аватар для Olchik
21 / 21 / 1
Регистрация: 31.07.2009
Сообщений: 131

Чтение из файла

08.02.2011, 14:33. Показов 6299. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ, помогите, пожалуйста. Мне надо разобрать программку на питоне, которая считывает некоторые данные из одного файла, а результат записывает в другой. Но почему-то файлы он не находит. Может, как-то по-другому их записывать надо в функции? Вот текст программы, а ниже описание ошибки
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
def ParseAttributes(infname):
    f = open(infname,'r')
    attr,attrnames,tests = {},[],[]
    attrnum = int(f.readline())
    for i in xrange(attrnum):
       fWords = f.readline().split()
       attrnames.append(fWords[0])
       attr[fWords[0]] = [i,fWords[1],fWords[2]]
       attr[fWords[1]] = 1
       attr[fWords[2]] = 0
    num = attr[f.readline().strip()][0]
    testnum = int(f.readline())
    for i in xrange(testnum):
        fWords = f.readline().split()
        test = []
        for j in xrange(attrnum): test.append(0)
        for j in xrange(attrnum):
            attrib = fWords[j][:fWords[j].find('=')]
            value = fWords[j][fWords[j].find('=')+1:len(fWords[j])]
            test[ attr[attrib][0] ] = attr[value]
        tests.append(test)
    f.close()
    return [attrnum,attrnames,attr,tests,num]
def entropy(tests,num):
    import math
    def log2(x): return math.log(x)/math.log(2)
    neg = float(len(filter(lambda x:(x[num]==0),tests)))
    tot = float(len(tests))
    if ((neg==tot) or (neg==0)): return 0
    return -(neg/tot)*log2(neg/tot)-((tot-neg)/tot)*log2(tot-neg)
def gain(tests,attrnum,num):
    res = 0
    for i in xrange(2):
        arr = filter(lambda x:(x[attrnum]==i),tests)
        res += entropy(arr,num)*len(arr)/float(len(tests))
    return entropy(tests,num)-res
def ID3(tests,num,f,tabnum,usedattr,attrnames,attr):
    def findgains(x):
        if usedattr[x]: return 0
        return gain(tests,x,num)
    if (len(tests)==0):
       f.write('\t'*tabnum+'1')
       return
    if len(filter(lambda x:(x[num]==0),tests))>len(filter(lambda x:(x[num]==1),tests)):
       majority = '0'
    else: majority = '1'
    gains = map(findgains,xrange(len(tests[0])))
    maxgain = gains.index(max(gains))
    if (gains[maxgain]==0):
       f.write('\t'*tabnum+majority+'\n')
       return
    arrpos=filter(lambda x:(x[maxgain]==1),tests)
    arrneg=filter(lambda x:(x[maxgain]==0),tests)
    newusedattr=usedattr
    newusedattr[maxgain]=True
    f.write('\t'*tabnum+attrnames[maxgain]+'='+attr[attrnames[maxgain]][1]+'\n')
    if (len(arrpos)==0):
       f.write('\t'*(tabnum+1)+majority+'\n')
    else:
        ID3(arrpos,num,f,tabnum+1,newusedattr,attrnames,attr)
    f.write('\t'*tabnum+attrnames[maxgain]+'='+attr[attrnames[maxgain]][2]+'\n')
    if (len(arrneg)==0):
       f.write('\t'*(tabnum+1)+majority+'\n')
    else:
        ID3(arrneg,num,f,tabnum+1,newusedattr,attrnames,attr)
def applyID3(infname,outfname):
    bigarr = ParseAttributes(infname)
    attrnum,attrnames,attr,tests,num = bigarr[0],bigarr[1],bigarr[2],bigarr[3],bigarr[4]
    f = open(outfname,'w')
    usedattr=[]
    for i in xrange(attrnum): usedattr.append(i==num)
    ID3(tests,attrnum-1,f,0,usedattr,attrnames,attr)
Python
1
2
3
4
5
6
7
8
9
10
>>> progr.applyID3('infname','outfname')
 
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    progr.applyID3('infname','outfname')
  File "C:\Python27\DLLs\progr.py", line 67, in applyID3
    bigarr = ParseAttributes(infname)
  File "C:\Python27\DLLs\progr.py", line 2, in ParseAttributes
    f = open(infname,'r')
IOError: [Errno 2] No such file or directory: 'infname'
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.02.2011, 14:33
Ответы с готовыми решениями:

Как заменить чтение строки из консоли на чтение текстового файла?
основное задание: найти частоту суффикса (например, &quot;ing&quot;) в текстовом документе. в прикреплённом коде текст вводится прямо в консоль,...

Чтение чисел из файла. Чтение после конца потока невозможно
Товарищи, помогите. В Pascal'e я не силен, так что не бейте меня ногами, но есть задача: написать обычную программу для расчета некоторых...

Заменить чтение файлов через IMAP на почте на чтение с файла с сылки и последующее удаление
Доброе время суток! Вот вожусь с кодом: function checkEmail() { ...

6
245 / 55 / 6
Регистрация: 05.08.2010
Сообщений: 222
08.02.2011, 15:18
Ну по ходу вместо
Python
1
progr.applyID3('infname','outfname')
нужно указывать имена входного и выходного файлов
1
 Аватар для Olchik
21 / 21 / 1
Регистрация: 31.07.2009
Сообщений: 131
08.02.2011, 15:33  [ТС]
Цитата Сообщение от Belthazor4 Посмотреть сообщение
Ну по ходу вместо
Python
1
progr.applyID3('infname','outfname')
нужно указывать имена входного и выходного файлов
так пробовала уже, пишет тоже самое
Python
1
2
3
4
5
6
7
8
9
10
>>> progr.applyID3('infn','outfn')
 
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    progr.applyID3('infn','outfn')
  File "C:\Python27\DLLs\progr.py", line 67, in applyID3
    bigarr = ParseAttributes(infname)
  File "C:\Python27\DLLs\progr.py", line 2, in ParseAttributes
    f = open(infname,'r')
IOError: [Errno 2] No such file or directory: 'infn'
может, эти файлы должны храниться в какой-нибудь особенной папке?(у меня они там же, где и файл с программкой)
естесственно, файлы infn и outfn я создала там же
0
245 / 55 / 6
Регистрация: 05.08.2010
Сообщений: 222
08.02.2011, 15:52
Вообще, если без пути, то должны находится в папке с исполняющим файлом python.exe. Если не хочется их туда перемещать, то можно написать полный путь к ним или сделать вот так
Python
1
2
import sys
sys.path.append('Имя директории, в которой лежат файлы')
Добавлено через 4 минуты
Ой, не слушай меня с sys.path.append - это я что то перепрограммировал, это немного для другого. Используй
Python
1
2
import os
os.chdir('Имя директории, в которой лежат файлы')
1
 Аватар для Olchik
21 / 21 / 1
Регистрация: 31.07.2009
Сообщений: 131
08.02.2011, 16:12  [ТС]
Ой, не слушай меня с sys.path.append - это я что то перепрограммировал, это немного для другого. Используй
Python
1
2
import os
os.chdir('Имя директории, в которой лежат файлы')
[/QUOTE]

прописала полный путь, теперь он все находит. Вот только незадача, пример программы из книжки НЕ работает .Теперь еще и разбираться почему придется. Если кто может, помогите, пжлста. Пишет следующее
Python
1
2
3
4
5
6
7
8
9
10
>>> progr.applyID3('C:\Python27\DLLs\infn.txt','C:\Python27\DLLs\infn.txt')
 
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    progr.applyID3('C:\Python27\DLLs\infn.txt','C:\Python27\DLLs\infn.txt')
  File "C:\Python27\DLLs\progr.py", line 67, in applyID3
    bigarr = ParseAttributes(infname)
  File "C:\Python27\DLLs\progr.py", line 4, in ParseAttributes
    attrnum = int(f.readline())
ValueError: invalid literal for int() with base 10: ''
текстовый файл outfn - пустой, а infn ниже

в любом случае, всем СПАСИБО
Вложения
Тип файла: txt infn.txt (32 байт, 38 просмотров)
0
245 / 55 / 6
Регистрация: 05.08.2010
Сообщений: 222
08.02.2011, 18:32
ну да, я так понял там что то особенное должно быть в этих файлах =) и первая строчка сто пудово должна быть числом, потому что
Python
1
attrnum = int(f.readline())
хочет первую строку в число превратить, а тут на те строка =) короче нужно знать, что делает код, а там так много букв =) легче написать тебе описание кода из книжки, чем разбираться в нем

Добавлено через 26 минут
Он у меня сожрал вот такой файл
Python
1
2
3
4
5
6
2
param11 val11 val12
param21 val21 val22
param11
1
param11=val11 param21=val22
но что он именно делает, мне некогда разобраться, напиши, что написано в книжке
1
 Аватар для Olchik
21 / 21 / 1
Регистрация: 31.07.2009
Сообщений: 131
08.02.2011, 19:52  [ТС]
ой, блин, я нечаянно не файл считала. Попробовала с нормальными входными параметрами, вроде работает. Спасибо за все. буду разбираться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.02.2011, 19:52
Помогаю со студенческими работами здесь

Чтение файла, чтение названия папки где находится файл, запись данных на PHP
Допустим у нас есть структура с папками типа Large -&gt; Vehicles -&gt; Firetruck_0 В этой папке лежит файл формата .dat Что нужно сделать? ...

Как заменить чтение массива на чтение файла с .txt
что делать если программа подстроена под чтение массива, а нужно читать .тхт

Чтение заголовка PCX файла и чтение растровых данных PCX файла
Привет форумчане! Столкнулся с такой проблемой. Нужно считать заголовок PCX файла и растровые данные PCX файла. Код написал. Часть...

Чтение бинарного файла - чтение первых 9 байт
Есть код, который читает первые 9 байт бинарного файла(заголовок записи) void ATS44Encoder::FileEncode() { QFile* file = new...

Чтение файла CSV и чтение из Table View
Здравствуйте, задача считать столбцы и строки excel в TextEdit. Прошу помощи в реализиции. Вручную сохраняю xls файл в csv. Потом надо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru