Python isdir返回带有字符串的true,但带有变量的false

时间:2012-03-07 17:54:49

标签: python

我的Python脚本试图打开一个县名文件,一次读取一个,然后找到一个同名的文件夹。我正在使用isdir来确保该目录首先存在。 print testpath语句显示了我正在测试的内容。

当我使用testpath作为isdir中的参数时,它返回FALSE。当我将print testpath的输出作为isdir参数时,它的计算结果为TRUE。

任何人都可以解释为什么testpath变量返回FALSE? 感谢

import sys, string, os

rootdir = 'y:/data/test'
county_list = "u:/sortedcounties.txt"

# Open county_list file and read first name.
os.path.exists(county_list)
os.path.isfile(county_list)
infile = open(county_list,'r')
line =  infile.readline()
while line:
   testpath = os.path.join(rootdir, line)
   print testpath
   if os.path.isdir(testpath):
        print 'testpath = true = ' + testpath

line = infile.readline()

2 个答案:

答案 0 :(得分:4)

您正在阅读文件的方式是导致此错误的原因。 对像object这样的文件执行.readline()会将下一行作为字符串返回,而不会删除'\n'值。以下是此

的示例
from StringIO import StringIO
a = StringIO()
a.write("test\nTest")
a.seek(0)
print repr(a.readline())

要解决此问题,您可以直接在文件本身上迭代替换代码

for line in open("filename"):
    line = line.strip()

进一步抽象这一层并使用像这样的上下文管理器

更好
with open("filename") as input_file:
    for line in input_file:
        line = line.strip()
# When you leave this block then the file is flushed and closed for you in a nice clean way

答案 1 :(得分:3)

line()的定义更改为:

line = infile.readline().strip()

您阅读的行将包含该行的尾随换行符,该换行符不是文件名的一部分。

另外,请记住这两行没有效果:

os.path.exists(county_list)
os.path.isfile(county_list)

如果测试失败,这些函数将返回False,但您不存储或测试返回值。此外,如果文件不存在或者文件不存在,打开文件将会出错,因此此测试不是必需的。最后,如果您确实使用了这些测试,则只需使用isfile() - 不存在的文件不是文件,因此isfile()会捕获两个不存在的路径。文件和路径不存在。