【问题标题】:iterating over specific directories in python遍历python中的特定目录
【发布时间】:2013-05-02 07:29:21
【问题描述】:

我正在尝试读取目录中的目录以访问特定文件。

现在,虽然我可以在所有子目录中获取我想要的目录(基本上所有名称为“已发送”和“收件箱”的目录,但我无法打开这些文件夹中的所有文件。

 for root, dirs,  files in os.walk("/home/nandita/Downloads/enron_mail_20110402"):
    if len(dirs) != 0:
        for dir in dirs:
            if dir == "sent" or dir == "inbox":
                rootd = os.path.join(root,  dir)
                print rootd
                    #for root, dirs,  files in os.walk("/home/nandita/Downloads/enron_mail_20110402/"+dir):
                for filename in files:
                    filename = os.path.join(rootd, filename)
                    print filename
                    with open(filename, 'r') as f:
                        head,sub,authors,recipients = [f.readline().strip() for i in range(4)]
                        data=f.read()

现在我可以读取所有子目录了:

> /home/nandita/Downloads/enron_mail_20110402/maildir/farmer-d/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/williams-w3/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/symes-k/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/lavorato-j/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/lavorato-j/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/arnold-j/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/arnold-j/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/lewis-a/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/lewis-a/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/neal-s/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/neal-s/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/mcconnell-m/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/mcconnell-m/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/skilling-j/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/skilling-j/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/shankman-j/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/shankman-j/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/reitmeyer-j/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/ermis-f/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/ermis-f/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/kuykendall-t/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/kuykendall-t/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/hendrickson-s/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/scott-s/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/scott-s/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/carson-m/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/carson-m/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/causholli-m/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/bass-e/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/bass-e/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/cuilla-m/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/cuilla-m/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/geaccone-t/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/shapiro-r/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/shapiro-r/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/solberg-g/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/slinger-r/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/taylor-m/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/taylor-m/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/cash-m/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/cash-m/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/ward-k/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/ward-k/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/mann-k/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/mann-k/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/giron-d/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/giron-d/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/saibi-e/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/fossum-d/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/grigsby-m/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/grigsby-m/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/davis-d/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/davis-d/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/delainey-d/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/delainey-d/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/sturm-f/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/sturm-f/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/schoolcraft-d/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/germany-c/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/germany-c/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/stclair-c/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/horton-s/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/horton-s/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/keavey-p/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/keavey-p/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/dean-c/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/dean-c/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/bailey-s/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/benson-r/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/benson-r/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/pereira-s/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/pereira-s/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/sanchez-m/inbox
/home/nandita/Downloads/enron_mail_20110402/maildir/lenhart-m/sent
/home/nandita/Downloads/enron_mail_20110402/maildir/lenhart-m/inbox

但即使我在文件中做文件名,我什么也得不到。有什么指点吗?

【问题讨论】:

  • 您不使用mailbox module的原因是什么?
  • 不需要if len(dirs) != 0:。如果为空,下面的for dir in dirs: 什么都不做。

标签: python python-2.7 directory os.walk


【解决方案1】:

仅当目录还包含目录时才搜索文件。您的 for 文件循环应该与 dirs 长度的测试处于同一级别

for root, dirs, files in os.walk("/home/nandita/Downloads/enron_mail_20110402"):
    dir = os.path.basename(root)
    if dir == "sent" or dir == "inbox":
        print root
        for filename in files:
            filename = os.path.join(root, filename)
            print filename
            with open(filename, 'r') as f:
                head,sub,authors,recipients = [f.readline().strip() for i in range(4)]
                data=f.read()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2019-01-16
    • 1970-01-01
    • 2019-11-02
    • 2013-11-04
    • 1970-01-01
    相关资源
    最近更新 更多