Я столкнулся с проблемой при использовании функции f.read в Python. Что можно сделать, если она не работает должным образом?

  • 13 августа 2023 г. 22:36
Ответы на вопрос 2
Также, чтобы оптимизировать код, можно использовать некоторые дополнительные методы и конструкции языка Python:

```python
with open("convert_der/after.txt", "r", encoding="utf-8") as r:
    content = r.read()

existing_usernames = set(content.split('|')[1:-1])

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

count = len(existing_usernames)
print(f'Суммарно {count}')
```

В этом коде мы сначала создаем множество `existing_usernames`, содержащее все уже существующие имена пользователей в файле. Затем, внутри блока `with open("convert_der/after.txt", "a", encoding="utf-8") as f:`, выполняем основную часть кода, где проверяем наличие имени пользователя в множестве `existing_usernames` и записываем новые имена только в том случае, если их нет. После этого мы обновляем множество `existing_usernames`, добавляя новые имена. В конце выводим общее количество уникальных имен пользователей в файле.

Таким образом, переписанный код будет более оптимизированным и будет пропускать уже существующие строки.
- Для начала мы открываем файл "after.txt" и готовимся к чтению его содержимого.
- Затем мы подсчитываем количество символов "|" в файле и выводим итоговую сумму.
- После этого мы снова пытаемся прочитать содержимое файла используя метод read(), но поскольку мы уже прочитали весь файл в предыдущей строке, получаем пустую строку.
- Важно понимать, что в файле есть виртуальный курсор, который указывает на текущую позицию при чтении. При открытии файла на чтение, курсор автоматически устанавливается в начало файла. Мы можем читать файл указывая количество символов для чтения или читать его построчно, тем самым перемещая курсор на указанное количество символов или на следующую строку. Когда мы прочитали весь файл без параметров (т.е. с помощью read()), курсор перемещается в конец файла, и из этой позиции мы можем только прочитать пустоту.
Похожие вопросы