Python:文件在某个时刻停止打开

时间:2011-11-16 19:09:47

标签: python

我用Python编写了以下程序:

import re
import os
import string

folder = 'C:\Users\Jodie\Documents\Uni\Final Year Project\All Data'

folderlisting = os.listdir(folder)
for eachfolder in folderlisting:
    print eachfolder
    if os.path.isdir(folder + '\\' + eachfolder):
        filelisting = os.listdir('C:\Users\Jodie\Documents\Uni\Final Year Project\All Data\\' + eachfolder)
        print filelisting

        for eachfile in filelisting:
            if re.search('.genbank.txt$', eachfile):
                genbankfile = open(eachfile, 'r')
                print genbankfile

            if re.search('.alleles.txt$', eachfile):
                allelesfile = open(eachfile, 'r')
                print allelesfile

它会查看很多文件夹,并打印以下内容:

  1. 每个文件夹的名称,不带路径
  2. 每个文件夹中所有文件的列表
  3. 每个文件夹中的两个特定文件(包含“.genbank.txt”和“.alleles.txt”的任何文件)。
  4. 代码一直有效,直到它到达某个目录,然后失败并出现以下错误:

    Traceback (most recent call last):
      File "C:\Users\Jodie\Documents\Uni\Final Year Project\Altering Frequency Practice\Change_freq_data.py", line 16, in <module>
        genbankfile = open(eachfile, 'r')
    IOError: [Errno 2] No such file or directory: 'ABP1.genbank.txt'
    

    问题是:

    1. 该文件绝对存在,因为程序在尝试打开文件之前列出它。
    2. 即使我从原始目录组中取出该目录,程序也会为它迭代的下一个文件夹引发相同的错误。接下来,如果那个被删除。等等。
    3. 这让我觉得它不是文件夹或其中的任何文件,而是Python的一些限制?我不知道。它困扰了我。

      任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

你应该使用os.walk()http://docs.python.org/library/os.html#os.walk

另外,您需要读取文件的内容,您不想打印文件对象。并且您需要在完成后关闭文件或使用上下文管理器为您关闭它。

看起来像是:

for root, dirs, files in os.walk(folder):
    for file_name in files:
        if re.search('.genbank.txt$', file_name) or \
            re.search('.alleles.txt$', file_name):
            with open(os.path.join(root, f), 'r') as f:
                print f.read()

请记住,这不是'完全'你正在做什么,这将走遍整个树,你可能只想走一个像你已经做的那样的水平。