我的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()
答案 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()
会捕获两个不存在的路径。文件和路径不存在。