使用 Python 搜索和输出 [关闭]
Posted
技术标签:
【中文标题】使用 Python 搜索和输出 [关闭]【英文标题】:Search and output with Python [closed] 【发布时间】:2016-02-13 09:45:24 【问题描述】:帮助大家!!!
150 个文本文件列表,
One text file with query texts: (
SRR1005851
SRR1299210
SRR1021605
SRR1299782
SRR1299369
SRR1006158
...etc).
我想从 150 个文本文件的列表中搜索每个查询文本。
例如,如果在至少 120 个文件中找到 SRR1005851
,则将在输出文件中附加 SRR1005851
。
搜索将遍历所有搜索查询文本并遍历所有 150 个文件。
总结:我正在寻找在 150 个文件中的至少 90% 中找到的查询文本。
【问题讨论】:
那么,您尝试过什么?向我们展示您的代码,向我们展示您遇到的困难,我们或许可以提供帮助。 到目前为止你做了什么?在实际编码时,您面临的具体问题是什么? 我写了以下代码。我知道需要什么,但我不知道如何使它工作。请帮我把 open("expressed.txt", "w") 作为结果计数 = 0:使用 open("C:/Users/ifeanyi/Desktop/modify/Bmori_id.txt", "r") 作为查询文件:对于 query_file 中的匹配:对于 glob.glob("*.txt") 中的名称:与 open(name, "r") 作为比较:对于比较中的行:如果在行中匹配:count=+1 result.append(count ) 【参考方案1】:我认为我没有完全理解你的问题。发布您的代码和示例文件会很有帮助。
此代码将计算所有文件中的所有条目,然后识别每个文件的唯一条目。之后,它将计算每个文件中每个条目的出现次数。然后,它将仅选择至少出现在 90% 的所有文件中的条目。
此外,这段代码本可以更短,但为了便于阅读,我创建了许多变量,它们的名称长且有意义。
请阅读 cmets ;)
import os
from collections import Counter
from sys import argv
# adjust your cut point
PERCENT_CUT = 0.9
# here we are going to save each file's entries, so we can sum them later
files_dict =
# total files seems to be the number you'll need to check against count
total_files = 0;
# raw total entries, even duplicates
total_entries = 0;
unique_entries = 0;
# first argument is script name, so have the second one be the folder to search
search_dir = argv[1]
# list everything under search dir - ideally only your input files
# CHECK HOW TO READ ONLY SPECIFIC FILE types if you have something inside the same folder
files_list = os.listdir(search_dir)
total_files = len(files_list)
print('Files READ:')
# iterate over each file found at given folder
for file_name in files_list:
print(" "+file_name)
file_object = open(search_dir+file_name, 'r')
# returns a list of entries with 'newline' stripped
file_entries = map(lambda it: it.strip("\r\n"), file_object.readlines())
# gotta count'em all
total_entries += len(file_entries)
# set doesn't allow duplicate entries
entries_set = set(file_entries)
#creates a dict from the set, set each key's value to 1.
file_entries_dict = dict.fromkeys(entries_set, 1)
# entries dict is now used differenty, each key will hold a COUNTER
files_dict[file_name] = Counter(file_entries_dict)
file_object.close();
print("\n\nALL ENTRIES COUNT: "+str(total_entries))
# now we create a dict that will hold each unique key's count so we can sum all dicts read from files
entries_dict = Counter()
for file_dict_key, file_dict_value in files_dict.items():
print(str(file_dict_key)+" - "+str(file_dict_value))
entries_dict += file_dict_value
print("\nUNIQUE ENTRIES COUNT: "+str(len(entries_dict.keys())))
# print(entries_dict)
# 90% from your question
cut_line = total_files * PERCENT_CUT
print("\nNeeds at least "+str(int(cut_line))+" entries to be listed below")
#output dict is the final dict, where we put entries that were present in > 90% of the files.
output_dict =
# this is PYTHON 3 - CHECK YOUR VERSION as older versions might use iteritems() instead of items() in the line belows
for entry, count in entries_dict.items():
if count > cut_line:
output_dict[entry] = count;
print(output_dict)
【讨论】:
非常感谢,这正是我想要的。我只是对文件进行了一些调整,它就像魔术一样工作。非常感谢兄弟。谢谢***... 太棒了兄弟,如果你愿意,请标记答案并投票。以上是关于使用 Python 搜索和输出 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Python:如何关闭我的 CSV 输入和输出文件? [复制]