我有以下代码。它适用于第一个目录,但不适用于第二个目录...... 我想要做的是计算不同目录中每个文件的行数。
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)
答案 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')