如何在Python中更改目录?

时间:2016-10-06 16:02:38

标签: python

我有以下代码。它适用于第一个目录,但不适用于第二个目录...... 我想要做的是计算不同目录中每个文件的行数。

Bounds currentMouseLocation=control.localToScreen(control.getBoundsInLocal());

回溯:

import csv
import copy
import os
import sys
import glob

os.chdir('Deployment/Work/test1/src')
names={}
for fn in glob.glob('*.c'):
    with open(fn) as f:
        names[fn]=sum(1 for line in f if line.strip() and not line.startswith('/') and not line.startswith('#') and not line.startswith('/*')and not line.startswith(' *'))    

print ("Lines test 1 ", names)
test1 = names

os.chdir('Deployment/Work/test2/src')
names={}
for fn in glob.glob('*.c'):
    with open(fn) as f:
        names[fn]=sum(1 for line in f if line.strip() and not line.startswith('/') and not line.startswith('#') and not line.startswith('/*')and not line.startswith(' *'))    

print ("Lines test 2 ", names)
test2 = names

print ("Lines ", test1  + test2)

3 个答案:

答案 0 :(得分:2)

您的os.chdir是相对于当前工作目录的解释。您的第一个os.chdir更改了工作目录。系统尝试查找相对于第一条路径的第二条路径。

有几种方法可以解决这个问题。您可以跟踪当前目录并更改回它。否则,相对于第一个目录创建第二个os.chdir。 (例如os.chdir(../../test2/src')。这有点难看。第三种选择是使所有路径绝对而不是相对。

答案 1 :(得分:2)

您必须根据需要使用尽可能多的..返回根目录,存储根目录或指定您家中的完整目录:

curr_path = os.getcwd()
os.chdir('Deployment/Work/test2/src')

os.chdir(curr_path)
os.chdir('Deployment/Work/test2/src')

或者:

os.chdir('Deployment/Work/test2/src')

os.chdir('../../../../Deployment/Work/test2/src') # Not advisable

除了上述内容之外,您可以考虑使用更多 Pythonic 方法来动态更改目录,例如使用上下文管理器来创建目录:

import contextlib
import os

@contextlib.contextmanager
def working_directory(path):
    prev_cwd = os.getcwd()
    os.chdir(path)
    yield
    os.chdir(prev_cwd)

with working_directory('Deployment/Work/test1/src'):
    names = {}
    for fn in glob.glob('*.c'):

with working_directory('Deployment/Work/test2/src'):
    names = {}
    for fn in glob.glob('*.c'):
        ...

您只需从当前目录指定相对目录,然后在该目录的上下文中运行您的代码。

答案 2 :(得分:0)

我认为脚本无效,因为您尝试使用相对路径更改目录。这意味着当您执行第一个1 min时,您将工作目录从当前更改为os.chdir,并在第二次调用'Deployment/Work/test1/src'时函数尝试将工作目录更改为{{ 1}}我认为这不是你想要的。

要解决此问题,您可以使用绝对路径:

os.chdir

或在第一个'Deployment/Work/test1/src/Deployment/Work/test2/src'之前,您可以跟踪当前文件夹:

os.chdir('/Deployment/Work/test1/src')