【问题标题】:Python returns no such file or directory when opening a file it has just found using re.search当使用 re.search 打开它刚刚找到的文件时,Python 不返回这样的文件或目录
【发布时间】:2011-11-28 08:29:32
【问题描述】:

我正在尝试打开多个文件夹中的特定文件,其名称以“.alleles.txt”结尾。我搜索该文件并找到它,但随后它返回:

IOError: [Errno 2] 没有这样的文件或目录:'abca3.alleles.txt'

当我尝试打开它时。

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

目录指定者:

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)

【问题讨论】:

  • 如何创建filelisting
  • @DavidAlber 已编辑帖子。
  • 另外:使用os.path.join 而不是添加“\\”分隔符。否则您的代码将只能在 Windows 上运行。

标签: python file directory ioerror


【解决方案1】:

您应该使用glob。试试这个

import glob

files = glob.glob('E:\\All Data\\*\\*.alleles.txt')

【讨论】:

  • 这里的问题是我想一次打开每个目录中的文件,然后使用同一目录中的其他文件执行操作。我看不出 glob 如何让我轻松匹配同一目录中的文件。
  • 可以通过os.path.dirname获取路径的目录部分
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    我怀疑您的某些文件名包含非 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 字符,这当然会导致文件名无效。另见this question

    这在docs for os.listdir(path) 中有说明:

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

    【讨论】:

      【解决方案4】:

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

      你需要给open你的文件的完整路径(包括目录名)。

      【讨论】:

        猜你喜欢
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 2013-09-04
        • 2017-12-19
        • 2021-04-09
        • 1970-01-01
        • 1970-01-01
        • 2012-02-27
        相关资源
        最近更新 更多