从列表中删除元素并将列表导入另一个代码

时间:2015-08-31 14:04:30

标签: python

我正在尝试列出单个目录中的所有html文件,这些文件正常。但是我也试图从该列表中删除所有不是html文件的内容。

我有8个名为1,2,3 ......等的文件和6.htmxl(删除)和pipe.sh.save(删除)

我制作的代码删除了.htmxl文件,但没有从列表中删除.sh.save文件。

from os import listdir
from os.path import isfile, join
import pyimport
import time


def main():
    onlyfiles = [f for f in listdir('/home/pi/keyboard/html') if isfile(join('/home/pi/keyboard/html',f)) ]
    j = 0
    print len(onlyfiles)

    for i in onlyfiles:

            if i.find(".html") == -1:
                    print i
                    print  "not a html"
                    j = onlyfiles.index(i)
                    print j
                    del onlyfiles[j]
            else:
                    print i
                    print "html found"

            time.sleep(0.5)

    outfiles = onlyfiles
    print outfiles
    return outfiles

if __name__ == "__main__":
    main()

我还有另一个代码,假设要获得“outfiles”列表

import server_handler

files = server_handler.main()

fileList = server_handler.outfiles

但是当我跑步时,我得到了:

AttributeError: 'module' object has no attribute 'outfiles'

我在另一个创建'output'的代码上运行几乎完全相同的代码,我以完全相同的方式导入它,所以我不确定为什么它不能正确导入。

3 个答案:

答案 0 :(得分:1)

您可能会发现以下方法更合适,它使用Python的glob模块:

import glob

print glob.glob('/home/pi/keyboard/html/*.html')

这将返回该文件夹中自动以.html结尾的所有文件的列表。

答案 1 :(得分:0)

i.find(".html")替换为i.endswith(".html")。现在你应该只获得HTML文件(或者更确切地说只有HTML文件)。

对于第二部分 - 删除:

fileList = server_handler.outfiles

server_handler.main()已经返回列表,因此您可以在files中找到它。最后一行没有任何意义。

修改

Martin's回答有更好的方法来获取文件。所以我建议你使用他的建议而不是我的建议:)。

答案 2 :(得分:0)

如果main是一个类,你可以使用

   class main():
     def __init__(self):
        ....
        self.outfiles = onlyfiles
        return self.outfiles