3

I am trying to open a specific file in many folders, with the name ending '.alleles.txt'. I search for the file and it is found, but then it returns:

IOError: [Errno 2] No such file or directory: 'abca3.alleles.txt'

when I try and open it.

for eachfile in filelisting:                       
    if re.search('\.alleles\.txt$', eachfile):
        allelesfile = open(eachfile, 'r')
        print '2'   

Directory is specified by:

folder = 'E:\\All Data'
folderlisting = os.listdir(folder) 

for eachfolder in folderlisting:
    print eachfolder 
    if os.path.isdir(folder + '\\' + eachfolder):
        filelisting = os.listdir(folder + '\\' + eachfolder)
4

4 回答 4

2

你应该使用glob. 尝试这个

import glob

files = glob.glob('E:\\All Data\\*\\*.alleles.txt')
于 2011-11-28T08:47:04.277 回答
1

出现错误是因为它试图从您运行 python 程序的目录中打开文件;而不是文件所在的目录。

您需要提供open文件的完整路径(包括目录名称)。

于 2011-11-28T09:40:51.430 回答
1

你是如何获得的filelisting?如果你使用filelisting = os.walk(directoryname)了,那么它会返回一个特殊的元组。你看了吗?

而且,是否filelisting包含文件的完整路径?如果文件位于脚本目录以外的目录中,例如存储在directoryname变量中,则必须以这种方式打开它们:

allelesfile = open(directoryname + "\\" + eachfile, 'r')

filelisting在您在此处输入信息(实际价值等)之前,我们无法提供有关您问题的更多信息。

于 2011-11-28T08:43:11.033 回答
1

我怀疑您的某些文件名包含非 ASCII 字符。尝试

folder = u'E:\\All Data'
folderlisting = os.listdir(folder)

for eachfolder in folderlisting:
    print eachfolder 
    if os.path.isdir(os.path.join(folder,eachfolder)):
        filelisting = os.listdir(os.path.join(folder,eachfolder))

注意u'...'前缀。没有它,os.listdir()可能会在文件名中静默删除或 ASCII 化非 ASCII 字符,这当然会导致文件名无效。另请参阅此问题

这是在文档中说明的os.listdir(path)

在 Windows NT/2k/XP 和 Unix 上,如果path是 Unicode 对象,则结果将是 Unicode 对象列表。无法解码的文件名仍将作为字符串对象返回。

于 2011-11-28T08:45:09.803 回答