python os.path在CMD中不起作用,但在eclipse中起作用

时间:2012-08-10 00:35:50

标签: path python-2.7

我想在.py文件所在的当前文件夹(python 2.7)下浏览。但是,它可以在我的日食中运行,但不适用于cmd。以下是代码:

import os
import sys

def checkFiles(path):

    fileDict = []
    for dirPath, dirNames, fileNames in os.walk(path):
        for fileName in fileNames:
            if os.path.splitext(fileName)[1] == '.entity':
                fileDict.append(os.path.join(dirPath,fileName))
                print dirPath
    return fileDict

fileDict = []

fileDict = checkFiles('.')

print fileDict

现在我在这个文件夹下有5个.entity文件,所以当打印fileDict时,它应该在列表中打印5个元素。但是,这在eclipse中工作正常,但它在cmd中返回一个空列表给我。有人可以帮我解决这个问题吗?

哦,顺便说一下,生成一个xml文件时还有另外一个问题。我认为它遇到了同样的问题。当我使用eclipse时,它会正常工作,但是当我使用cmd时它不会创建任何文件。

1 个答案:

答案 0 :(得分:0)

首先,不要使用字符串连接来连接路径。使用os.path.join
其次,不要将\\用于路径分隔符。 /是通用的,适用于Windows:

fileDict.append(os.path.join(dirPath, fileName))

然后当你打电话时:

fileDict = checkFiles('.')

而且,当您循环时,使用相同的变量名称覆盖列表:

for fileNames in fileNames:

所以,像这样:

def checkFiles(path):
    fileDict = []
    for dirPath, dirNames, fileNames in os.walk(path):
        for fileName in fileNames:
            if os.path.splitext(fileName)[1] == '.entity':
                fileDict.append(os.path.join(dirPath, fileName))
    return fileDict

fileDict = checkFiles('.')

注意:此脚本假定您的文件位于运行脚本的位置下... 脚本本身的位置。

C:\SomeDir> python C:\path\to\script.py 

...您的文件需要位于C:\SomeDir而不是C:\path\to\

当您通过eclipse运行脚本时,当前工作目录就是该工作空间。但是当你通过cmd运行它时,它就在你当前的目录中。