在Python中设置文件的通用路径(不带for循环)

2024-06-13 14:33:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试设置我的工作目录,以便它在所有机器上都是通用的,但没有for循环。基于此线程,我正在使用以下代码:Finding particular path in directory in Python

import os
try:                                                                                                                        
    start = '/Users'                                                                                                        
    for dirpath, dirnames, filenames in os.walk(start):
        for filename in filenames:
            if filename == "US_Accidents_Dec19.csv":
                filename = os.path.join(dirpath, filename)
                os.chdir(dirpath)
except:
    pass


try:
    start1 = "C:\\Users"
    for dirpath, dirnames, filenames in os.walk(start1):
        for filename in filenames:
            if filename == "US_Accidents_Dec19.csv":
                filename = os.path.join(dirpath, filename)
                os.chdir(dirpath)
except:
    pass

如果不使用for循环,我将如何执行此操作?使脚本速度变慢


Tags: pathinforifosfilenamestartusers
2条回答

我的建议是创建一个project_path变量,它将是机器到项目的本地路径。可以通过创建一个包含

import os

project_path: str = os.path.abspath(os.path.dirname(__file__))

所以你的项目看起来像

 - __init__.py 
 - some_folder
 |  some_script.py
 |  data_file
 - some_other_script.py
 - project_path.py

然后,您可以按如下方式轻松使用它:

from project_path import project_path

with open(f'{project_path}/some_folder/data_file', 'r') as file:
    # do some stuff


# In your case
with open(f'{project_path}/US_Accidents_Dec19.csv', 'r') as file:
    ...

无论机器的体系结构、操作系统等如何,这都将起作用

尝试使用pathlib库。它应该为您处理格式问题。 假设包含该文件的文件夹位于您自己的主目录中的某个位置,则此代码应执行以下操作:

import os
from pathlib import Path


generator = Path.home().glob('**/US_Accidents_Dec19.csv')
wd = list(generator)[0]
os.chdir(wd)

pathlib库可以独立于操作系统使用路径Path.home()查找您的用户目录,例如'\Users\MyAccount'或'C:\Users\MyAccount'

glob()函数可以根据模式为您查找文件**/表示搜索所有子文件夹

如果不仅要搜索用户目录,还要搜索所有用户目录,只需执行Path.home().parent.glob('**/US_Accidents_Dec19.csv')

如果要查找的文件位于与脚本相关的同一文件夹或子文件夹中,请尝试使用Path(__file__).resolve()获取文件的完整路径,然后在此文件夹上使用glob

generator = Path(__file__).resolve().glob('**/US_Accidents_Dec19.csv')
wd = list(generator)[0]
os.chdir(wd)

glob()函数返回一个生成器对象。生成器对象可以通过list(obj)转换为列表,也可以像列表一样通过for循环对其进行迭代

相关问题 更多 >