По умолчанию без указания пути подразумевается, что файл находится в текущей папке. А вот текущая папка может находиться где угодно, а вовсе не там, где находится исполняемый файл исходника.
Соответственно, если нужно отсчитывать путь от исходника, то это надо явно прописывать:
from os.path import dirname, join
f = open(join(dirname(__file__), "file.txt"), "r")
print(f.read())
>почему он не видит эту txt папку?
Так txt файл или отдельная папка, которая где-то еще лежит относительно исходника?
Плюс к этому надо учесть, что винда может скрывать расширения некоторых файлов, если смотреть через ненастроенный проводник и файл типа file.txt может на самом деле иметь имя file.txt.txt или подобное