Неопределенное поведение Python для открытия / чтения файла

#python

#python

Вопрос:

Я пытаюсь прочитать содержимое из текстового файла, используя Python3.7 и ниже приведен мой код, и я запускаю программу на RHEL 7

Я экспортировал требуемую переменную среды (т.Е. Sourcepath), и все 3 файла имеют одинаковое содержимое в нем

 [sathish@WEB Exercises]$ pwd
/tmp/Exercises
[sathish@WEB Exercises]$ ls -l develop/global/src
total 12
-rw-r--r-- 1 skailas wheel 124 Dec 29 06:51 a.txt_bak
-rw-r--r-- 1 skailas wheel 124 Dec 29 06:54 b.txt
-rw-r--r-- 1 skailas wheel 124 Dec 29 06:53 version.txt
 
 import os
import sys

# Variable used to store file contents
file_contents = None

def readfromfile(filename):
        # Check whether the environment variable SourcePath exists
        # If not create one and assign a default value
    if not os.environ.get("Sourcepath", None):
        print("Environment variable Sourcepath does not exists")
        print("Create the environment variable and assign default value")
        os.environ["Sourcepath"] = "/tmp/Exercises"

    print("Sourcepath=", os.environ.get("Sourcepath"), os.getcwd())
    print(os.path.join(os.environ["Sourcepath"],"develop","global","src",filename))

    try:
        fh = open(os.path.join(os.environ["Sourcepath"],"develop","global","src",filename), "r")

        if ( os.stat(filename).st_size == 0):
            print("File is empty");
        else:
            # Read the contents from file and store it in a
            # global variable file_contents
            global file_contents
            print("Opened file", filename)
            file_contents = fh.read()
            print("File contents are", file_contents)
            fh.close()
            print("File closed")
    except FileNotFoundError:
        print("File not found for Reading ... Exiting", filename)
        sys.exit()
    except:
        print("Other Error ... Exiting")
        sys.exit()

readfromfile('b.txt')
 

Вывод ошибки

 [skailas@WEB Exercises]$  python3.7 fex.py
Environment variable Sourcepath does not exists
Create the environment variable and assign default value
Sourcepath= /tmp/Exercises /tmp/Exercises
/tmp/Exercises/develop/global/src/b.txt
File not found for Reading ... `Exiting b.txt`
 

Упомянутая выше программа считывает содержимое файла для file a.txt_bak . Однако, когда я вызываю функцию readfromfile('b.txt') or readfromfile('version.txt') , она говорит "FILE NOT FOUND ERROR"

Я действительно смущен, почему для ‘a.txt_bak’ это работает и почему он сообщает об ошибке для двух других файлов? Иногда моя программа не считывает содержимое, даже если файл существует по тому же пути

Я делаю что-то не так с fclose() или что я упускаю? Пожалуйста, помогите мне разобраться в проблеме

Комментарии:

1. Сделайте себе одолжение и откройте файлы в качестве контекстного менеджера

2. Ваш вызов os.stat используется filename без каталога; может быть, именно отсюда возникает исключение?

3. @Hans Да. Я надеюсь на это. Позвольте мне попытаться проинформировать вас

4. @Hans Вы были правы, os.stat была строкой, вызвавшей проблему. Спасибо, что указали на проблему. Я сходил от этого с ума

5. Спасибо за отзыв, рад, что решил эту проблему.