метод read возвращает пустую строку
Код должен перебирать файлы из ключей словаря и если файл непустой, то содержимое файла должно становится значением ключа, но вместо содержимого почему-то устанавливается пустая строка.
Код:
files = {"logs_2.txt":None, "logs_3.txt":None, "logs_4.txt":None}
for file in files:
f = open(file, "r")
if len(f.read()):
files[file] = f.read()
f.close()
print(files)
Файл logs_4.txt:
1,2,3,4,5,6,7,8,9,10
Stdout после print(files):
{'logs_2.txt': None, 'logs_3.txt': None, 'logs_4.txt': ''}
Ответы (1 шт):
Дело в том, что когда вы делаете read, то после чтения из файла питон запоминает, на каком месте файла он остановился, и следующий read будет с этого же места.
Но это имеет хоть какой-то смысл, только когда вы читаете файл частично.
Если же вы используете read() без указания, сколько именно надо читать, то файл вычитывается полностью, и для следующего read ничего не остаётся.
В len(f.read()) уже целиком вычитали файл, и следующий read ничего нового уже не прочитает.
Надо так:
files = {"logs_2.txt":None, "logs_3.txt":None, "logs_4.txt":None}
for file in files:
f = open(file, "r")
data = f.read() # Делаем read только один раз
if len(data): # А потом используем сохранённое значение
files[file] = data # сколько угодно раз
f.close()
print(files)