Уведомления

Группа в Telegram: @pythonsu

#1 Март 4, 2013 07:48:33

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

Чтение из файла по условию

Добрый день.
Проверил наличие файла:

if os.path.exists('file.txt')
В файле всего 3 строки.
Как проверить кодировку файла utf-8, а так же:
1 строка целое число 1000> x > 100
2 строка целое число 5000 > x > 500
3 число логическое true или false.

П.С. Если тип данных не совпадает или отсутствуют нужные строки, то хочу удалить файл создать новый. Проблема в том что он уже открыт. Пытаюсь закрыть.
if os.path.exists('file.txt'):
    os.close('file.txt')
    os.remove('file.txt')
Пишет ошибку os.close('file.txt') TypeError: an integer is required
Но как же так? В справке написано os.close(fd), как я директорией укажу 1 или 0?
П.П.С. Вот может и не понимаю, но как то туповато получилось.
if os.path.exists('file.txt'):
    r = open('file.txt')
    r.close()
    os.remove('file.txt')
Почему же тогда remove не требует того же что и close???



Отредактировано Ubhra (Март 4, 2013 08:18:08)

Офлайн

#2 Март 4, 2013 08:27:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Чтение из файла по условию

Ubhra
Как проверить кодировку файла utf-8, а так же:
1 строка целое число 1000> x > 100
2 строка целое число 5000 > x > 500
3 число логическое true или false.
кодировку не проверяют, её знают и указывают при открытии
лучше приведи пример правильного файла



Офлайн

#3 Март 4, 2013 08:45:46

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

Чтение из файла по условию

Насчет кодировки прочел что по умолчанию сохраняет в utf-8, что вполне приемлемо.
А вот с проверкой строк проблема.

В общем вот так как то:

if os.path.exists('file.txt'):
    r_i = open('file.txt')
.........................
.........................
    r_i.close()
#    os.remove('file.txt')
else:
    open('file.txt', "w")
А это содержимое файла:
300
700
True



Офлайн

#4 Март 4, 2013 09:42:27

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Чтение из файла по условию

if os.path.exists('file.txt'):
    with open("file.txt", "rt", encoding="utf-8") as f:
        try:
            if 100 < int(next(f)) < 1000:
                if 500 < int(next(f)) < 5000:
                    if next(f).strip() in ("False", "True"):
                        # все условия выполнены
        except ValueError:
            # в строке не число
else:
    ...



Офлайн

#5 Март 4, 2013 10:26:11

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

Чтение из файла по условию

Не проходит

if os.path.exists('file.txt'):
    with open("file.txt", "rt", encoding="utf-8") as f:
Сразу перескакивает на
except ValueError:



Офлайн

#6 Март 4, 2013 11:53:05

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

Чтение из файла по условию

Тут результат print('yes')

import os
if os.path.exists('file.txt'):
    with open("file.txt", "rt", encoding="utf-8") as f_l:
        try:
            print('yes')
        except ValueError:
            print('error')
else:
    print('no')

А если так, то результат print('error')
import os
if os.path.exists('file.txt'):
    with open("file.txt", "rt", encoding="utf-8") as f_l:
        try:
            if 100 < int(next(f_l)) < 1000:
                if 500 < int(next(f_l)) < 5000:
                    if 600 < int(next(f_l)) < 5000:
                        print('yes')
        except ValueError:
            print('error')
else:
    print('no')



Отредактировано Ubhra (Март 4, 2013 12:00:48)

Офлайн

#7 Март 4, 2013 12:00:51

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Чтение из файла по условию

При той же структуре файла должен написать error



Офлайн

#8 Март 4, 2013 12:02:45

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Чтение из файла по условию

А это содержимое файла:
300 - A
700 - B
True -C

import os
if os.path.exists('file.txt'):
    with open("file.txt", "rt", encoding="utf-8") as f_l:
        try:
            if 100 < int(next(f_l)) < 1000: #A
                if 500 < int(next(f_l)) < 5000: #B
                    if 600 < int(next(f_l)) < 5000: #C 
                        print('yes')
        except ValueError:
            print('error')
else:
    print('no')
“True” к int никак не преобразовывается



Офлайн

#9 Март 4, 2013 12:12:07

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

Чтение из файла по условию

Заменил на что проще:
300
700
800



Прикреплённый файлы:
attachment pr.7z (396 байт)

Офлайн

#10 Март 4, 2013 12:27:54

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Чтение из файла по условию

И? все работает



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version