跟踪文本文件是否包含某些符号

时间:2015-12-15 02:29:10

标签: python

我有一系列文本文件,这些文件来自书籍。 (将其视为目录中的一系列文本文件)。每个文本文件都有几行文本。我的任务是在整个文本文件中搜索特殊字符,在这种情况下是#'。

我想要一个程序来搜索整个页面,并记录这个页面是否有#'#'或者没有'#'。输出results应该是一个列表,其中列出了特定页面以及是否'#'存在。

page1 yes
page2 no
page3 no

我的问题:我不知道如何跟踪哪个文件/页面有'#'哪个没有。

hashkeylist = []

for page in book:
    for line in page:
        for x in line:
            if x == '#':
                hashkeylist.append(x)
            else:
                pass

results = []

for i in range(len(book)): # range of number of pages to label pages
    if '#' in hashkeylist:
        results.append('page %d yes' % (d)) 
    else:
        results.append('page %d no' % (d)) 

显然,这根本不起作用。

如何跟踪哪个页面有一个哈希键符号,以及哪个页面没有?

4 个答案:

答案 0 :(得分:1)

将此视为目录中的一系列文本文件)。每个文本文件都有几行文本

这很容易解决,使用两个列表循环遍历每个文件,一个用于具有符号的文件,另一个用于那些不用的文件,使用any查看是否有任何行包含符号这将在匹配时短路,不需要一次读取或存储所有线路:

 has, has_not = [],[]
 for fle in files:
    with open(fle) as f:
        if any("#" in line for line in f):
                has.append(fle)
        else:
            has_not.append(fle)

答案 1 :(得分:0)

而不是循环遍历每一行并搜索单个字母的字符。打开文本文件时,只需执行以下操作:

f.read().find('#')

如果f是你的文件对象,如果在文本的任何地方找不到符号,它将返回-1,否则它将返回第一次出现的字符的索引。

要跟踪文件 符号,您可以使用上面的代码行作为条件,如果它返回-1以外的任何内容,请添加当前的名称打开文件到列表供以后使用。

l = list()
l.append(f.name) # name is a class variable for file objects that is preset

答案 2 :(得分:0)

所以,我认为这应该有效:

results = []

for num, page in enumerate(book, start=1):
    if '#' in '\n'.join(page):
        results.append('page{} yes'.format(num))
    else:
        results.append('page{} no'.format(num))

由于您的代码看似page是一个列表,并且该列表中有一些。如果page是字符串而非列表,那么您不需要'\n'.join(page),只需使用if '#' in page:

或者,单行版本:

results = ['page{0} {1}'.format(num, 'yes' if '#' in '\n'.join(page) else 'no') for num, page in enumerate(book, start=1)]

答案 3 :(得分:0)

首先,列出file_list列表变量中的所有文本文件然后迭代。以下是示例代码。如果对你有帮助,请试试。

file_list = []
results = []
for filename in file_list:
    with open(filename, "r") as fileobj:
        if "#" in fileobj.read():
            results.append("%s Yes" % filename)
        else:
            results.append("%s No" % filename)

for item in results:
    print item