python获取文件路径及小坑

python获取文件路径

一、使用:在框架搭建中,需要获取配置文件所在的路径等

def file_oper():
  path = os.getcwd()+ '\pickle.txt' # 返回当前工作目录
  path2 = os.path.abspath(r'C:\Users\viruser.v-desktop\PycharmProjects\hexin\practice\pickle.txt') # 除非写入绝对路径,否则返回当前工作路径/拼接路径
  path3 = os.path.dirname(r'C:\Users\viruser.v-desktop\PycharmProjects\hexin\practice\pickle.txt') # 返回路径的目录 (上一层)
  path4 = os.path.abspath(__file__) # 返回当前文件的路径
  print('{0}\n {1}\n {2}\n{3}'.format(path,path2,path3,path4))
   
  》》》 >>>
C:\Users\viruser.v-desktop\PycharmProjects\hexin\practice\pickle.txt
C:\Users\viruser.v-desktop\PycharmProjects\hexin\practice\pickle.txt
C:\Users\viruser.v-desktop\PycharmProjects\hexin\practice
C:\Users\viruser.v-desktop\PycharmProjects\hexin\practice\practice_9.6.py

二、搭建框架时遇到的小坑

getcwd():是返回当前工作路径,即调用运行的文件路经

abspath('./byy.py')路径的计算是以程序运行的当前目录来进行计算的,或者说abspath只是字符串拼接,并非从文件本身属性进行获取

例:

1、文件目录结构:

2、common_FileRead.py文件

common_FileRead.py中编写读取文件common_path.yml并返回common_path.yml的内容

def get_path(file_name):


    yaml_path = os.path.abspath('./common_path.yml')  # 获取yml文件的路径 ,本意以当前文件计算

# abspath/getcwd均是通过字符串拼接,即从程序运行的当前目录进行计算,即从调用文件business_common.py开始计算路径,导致路径错误,找不到文件
  yaml_file = open(yaml_path, encoding='utf-8') datas = yaml.load(yaml_file, Loader=yaml.FullLoader) path = datas[file_name] return path 

3、business_common.py

获取get_path(file_name)返回值

    def hx_login():
        basewindow = BaseWindow()
        """
        登录行情
        :return: 
        """
        # 启动行情客户端
        
        client_path = get_path('client_path')
        print(client_path)
        
Business_Common.hx_login()
运行报错:

FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\viruser.v-desktop\\PycharmProjects\\PC_UiAutomation\\Business\\common_path.yml'

报错原因:

 yaml_path = os.path.abspath('./common_path.yml')是从程序运行的当前目录进行计算,即从business_common.py开始计算路径,导致路径错误,找不到文件

 

修改:因此需获取本文件绝对路径,再进行拼接

root_path = os.path.dirname(os.path.dirname(__file__))
common_path = os.path.join(root_path, 'Common\common_path.yml')

 

原文地址:https://www.cnblogs.com/byy521/p/15563842.html