@Yooshyasha

Питон ставит правила(сарказм) по f.read, что делать, не работает как должно. Есть возможности?

Вообщем, по идее код должен роботать
while True:
    line = before.readline()
    if not line:
        break
    username = line.split(',')[3][14:-1]
    with open("convert_der/after.txt", "r") as r:
        count = r.read().count('|')
        print(f'Суммарно {count}')
        read = r.read()
        if f'|{username}|' in read:
            print(f'{username} уже в файле.')
        elif f'|{username}|' not in read:
            if f'|{username}|' != '|on|':
                with open("convert_der/after.txt", "a", encoding="utf-8") as f:
                    f.write(f'{username}|')
                    print(f'{username} вписан.')
            else:
                print(f'{username} без имени.')

он записывает нужную информацию в файл, но проблема в том что он должен проверять, был этот текст в файле ранее или не было, а емо абсолютно пофиг, был он или нет, вписывает все без разбору, разве что '|on|' не вписывает.
Если что код перерабатывает строку на подобии {'id': 5750829707, 'first_name': 'SONYASHKA||_♡♥︎||', 'last_name': None, 'username': 'Sonnya17l', 'phone': None, 'bot': False, 'deleted': False, 'scam': False} и вытаскивает с неё только username, буду не против если его дополнительно можно как то оптимизировать
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
with open("convert_der/after.txt", "r") as r:
        count = r.read().count('|')
        print(f'Суммарно {count}')
        read = r.read()

Смотрите что тут происходит:
- открывается файл на чтение
- вычитывается всё содержимое файла и в содержимом подсчитывается число "|", при этом считанное содержимое никуда не сохраняется в памяти.
- повторный read уже ничего не прочитает. Просто пустая строка будет.

В файле есть виртуальный курсор, когда файл открыт на чтение, курсор стоит в его начале. Можно читать указывая количество символов для чтения, или читать построчно, тогда курсор сдвигается на указанное число символов или на строку, а дальнейшие чтения будут уже с нового места. Если вы вычитали весь файл, а именно это происходит при read() без параметров, то курсор уже в конце, и оттуда можно прочесть только пустоту.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы