Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 08.11.2020
Сообщений: 8

Не работает условие (if) при чтении файла

08.11.2020, 21:52. Показов 1649. Ответов 11

Студворк — интернет-сервис помощи студентам
Приветствую.

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

Мой код:
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
'''
s = {
            "Номер счета": {
                "ФИО": значение,
                "Дата операции": ['тип операции', сумма],
                "Остаток на счете": значение,
                }
}
'''
s = {}
 
f = open('text_01_01.txt', 'r', encoding='utf-8')
line = f.readline()
 
while line:
    if line[0:2] != 'O':
        a = line[0:11]
        # b = line[11:41]
        # c = line[41:47]
        print("\nAAAA" + " " + a)
    else:
        d = line[3:13]
        # i = line[16:19]
        # f = line[22:26]
        print("\nBBBB" + " " + d)
 
    line = f.readline()
    f.close
print(s)
В выводе получаю:
Code
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
AAAA 00000000001
 
AAAA OOO10.01.19
 
AAAA OOO15.02.19
 
AAAA OOO20.03.19
 
AAAA 00000000002
 
AAAA OOO10.01.20
 
AAAA OOO15.02.20
 
AAAA OOO20.03.20
 
AAAA 00000000003
 
AAAA OOO10.01.20
 
AAAA OOO15.02.20
 
AAAA OOO20.03.20
 
AAAA 00000000004
 
AAAA 00000000005
 
AAAA 00000000006
{}
Вопрос, почему строку где в начале стоит "OOO" он выводит? Ведь для обработки информации в тех строчках будут другие условия и т.д.

Не обращайте внимание на "АААА" это я пытался понять где затык*.

Текст файла, с которого забираю информацию:
Code
1
2
3
4
5
6
7
8
9
10
11
12
00000000001Имя001 Отчество001 Фамилия001 000001
OOO10.01.1999   ZZZ   1000
OOO15.02.1999   ZZZ   1500
OOO20.03.1999   ZZZ   2000
00000000002Имя002 Отчество002 Фамилия002 000002
OOO10.01.2000   ZZZ   1000
OOO15.02.2000   ZZZ   1500
OOO20.03.2000   ZZZ   2000
00000000003Имя003 Отчество003 Фамилия003 000003
OOO10.01.2001   ZZZ   1000
OOO15.02.2001   ZZZ   1500
OOO20.03.2001   ZZZ   2000
П.С
00000000001 - номер счета;
Имя001 Отчество001 Фамилия001 - ФИО;
000001 - остаток на счете;
OOO - "разделитель" строк;
10.01.1999 - дата операции;
ZZZ - тип операции;
2000 - сумма.

Без строк которые на "OOO" первый скрипт хорошо все отрабатывает - записывает в словарь. Решил себе задачу усложнить и не могу победить...

Прошу сильно палками не бить...
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.11.2020, 21:52
Ответы с готовыми решениями:

Trim не работает при чтении из файла?
Trim удаляет пробелы при задании строки в коде программы. Trim удаляет пробелы при чтении строки их Excel файла. Но Trim не удаляет...

Неверная кодировка при чтении из текстового файла (Encoding не работает)
Есть программа, которая должна выводить фамилии (выбранные по определенному критерию) в файл: //метод сравнения двух матриц static...

"Нарушение прав доступа при чтении по адресу" при чтении структур из бинарного файла
Пытаюсь разобраться со структурами в бинарных файлах. Допустим, есть массив структур. Записываю его в бинарный файл (закомментированный...

11
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
08.11.2020, 22:12
Цитата Сообщение от 02MB Посмотреть сообщение
f.close
а ты почему закрываешь файл внутри цикла?

Добавлено через 17 секунд
пошел за палкой
0
Эксперт Python
8849 / 4500 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
08.11.2020, 22:30
Welemir1,

Не по теме:

не мешает ему - он только на чтение открывает :)



Добавлено через 34 секунды
02MB, это хотел получить?
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
'''
s = {
            "Номер счета": {
                "ФИО": значение,
                "Дата операции": ['тип операции', сумма],
                "Остаток на счете": значение,
                }
}
'''
s = {}
 
f = open('input.txt', 'r', encoding='utf-8')
lines = f.readlines()
for line in lines:
    if  'OOO' not in line :
        a = line[0:11]
        # b = line[11:41]
        # c = line[41:47]
        print("\nAAAA" + " " + a)
    else:
        d = line[3:13]
        # i = line[16:19]
        # f = line[22:26]
        print("\nBBBB" + " " + d)
 
    line = f.readline()
    f.close
print(s)
1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
08.11.2020, 22:31
Цитата Сообщение от 02MB Посмотреть сообщение
if line[0:2] != 'O':
всегда не верно ибо слайс вернет 2 буквы
1
0 / 0 / 0
Регистрация: 08.11.2020
Сообщений: 8
09.11.2020, 05:08  [ТС]
# Не могу понять как цитировать сообщения....
0
Эксперт Python
8849 / 4500 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
09.11.2020, 05:13
02MB, Что выходит - написал
А что хотел получить на выходе?
0
0 / 0 / 0
Регистрация: 08.11.2020
Сообщений: 8
09.11.2020, 05:17  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
а ты почему закрываешь файл внутри цикла?
Все делаю по примерам... Исправил.

Цитата Сообщение от Gdez Посмотреть сообщение
это хотел получить?
мне стыдно, цикл for я не видел просто в примерах на которые натыкался, при работе с файлами (как ни странно). В Вашем примере он ищет совпадение по все строке? А если просто гипотетически представить если будет где то ложное срабатывание?
Я почему и пошел по пути строго количество символов в строках....

Цитата Сообщение от Welemir1 Посмотреть сообщение
всегда не верно ибо слайс вернет 2 буквы
Да, точно.

В итоге закрытие файла убрал из цикла, поменял if line[0:2] != 'O': на if line[0:3] != 'O': , результат тот же - цикл не работает как нужно.

Вот что нужно получить в идеале:
Code
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
AAAA 00000000001
 
ВВВВ 10.01.19
 
ВВВВ 15.02.19
 
ВВВВ 20.03.19
 
AAAA 00000000002
 
ВВВВ 10.01.20
 
ВВВВ 15.02.20
 
ВВВВ 20.03.20
 
AAAA 00000000003
 
ВВВВ 10.01.20
 
ВВВВ 15.02.20
 
ВВВВ 20.03.20
 
AAAA 00000000004
 
AAAA 00000000005
 
AAAA 00000000006
Сама идея в том , что бы все красиво уложить в словарь, для дальнейшей обработки информации.
0
Эксперт Python
8849 / 4500 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
09.11.2020, 05:23
Лучший ответ Сообщение было отмечено 02MB как решение

Решение

02MB,
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
'''
s = {
            "Номер счета": {
                "ФИО": значение,
                "Дата операции": ['тип операции', сумма],
                "Остаток на счете": значение,
                }
}
'''
s = {}
 
f = open('input.txt', 'r', encoding='utf-8')
line = f.readline()
 
while line:
    if line[0:3] != 'OOO' :
        a = line[0:11]
        # b = line[11:41]
        # c = line[41:47]
        print("\nAAAA" + " " + a)
    else:
        d = line[3:13]
        # i = line[16:19]
        # f = line[22:26]
        print("\nBBBB" + " " + d)
 
    line = f.readline()
    f.close
print(s)
Добавлено через 2 минуты
Впрочем и предыдущий код то же самое выводил...
Сама идея, типа "id" строк хороша - но нужно не по одной букве - где то "выскочит"...
1
0 / 0 / 0
Регистрация: 08.11.2020
Сообщений: 8
09.11.2020, 05:26  [ТС]
Цитата Сообщение от Gdez Посмотреть сообщение
if line[0:3] != 'OOO' :
Ну емае!!!

Самое смешное что в самом начале у меня так и было.... Но поменял на "О"....

Да работает.

Всем спасибо... Эх эта не внимательность.....
0
Эксперт Python
8849 / 4500 / 1864
Регистрация: 27.03.2020
Сообщений: 7,316
09.11.2020, 05:28
02MB,ОК
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.11.2020, 05:32
Цитата Сообщение от Welemir1 Посмотреть сообщение
а ты почему закрываешь файл внутри цикла?
Так он не вызывает закрытие файла

Добавлено через 1 минуту
Цитата Сообщение от Gdez Посмотреть сообщение
if line[0:3] != 'OOO' :
Python
1
2
>>> 'ОООАА'.startswith('ООО')
True
0
 Аватар для Vigi
641 / 481 / 179
Регистрация: 28.05.2012
Сообщений: 1,419
09.11.2020, 06:52
Рыжий Лис,
а так загадочней
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.11.2020, 06:52
Помогаю со студенческими работами здесь

Не работает чтение из файла, не могу понять в чём ошибка (нарушение прав доступа при чтении по адресу 0xCDCDCDD5)
#include "pch.h" #include <iostream> #include <string> #include <fstream> #include <Windows.h> using namespace std; int...

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

Как при чтении файла проверить достигнут ли конец файла?
Как при чтении файла проверить достигнут ли конец файла? Dim Red As IO.BinaryReader Red = New...

Можно ли при чтении из файла элементов в список удалять эти элементы(без очистки файла)
Допустим,есть файл,в нём записаны 3 обьекта(отличаются одним параметром,по которому как раз и достаются обьекты из файла).Пусть второй...

Ошибка при вызове метода класса, при чтении из файла
добрый день, пытаюсь считать данные из и запихнуть их в список в файле у меня вот такие данные a01 b10 А и Б надо запихнуть в...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru