我有一系列文本文件,这些文件来自书籍。 (将其视为目录中的一系列文本文件)。每个文本文件都有几行文本。我的任务是在整个文本文件中搜索特殊字符,在这种情况下是#'。
我想要一个程序来搜索整个页面,并记录这个页面是否有#'#'或者没有'#'。输出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))
显然,这根本不起作用。
如何跟踪哪个页面有一个哈希键符号,以及哪个页面没有?
答案 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