使用 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搜索html [关闭]

在混合python numpy数组中搜索和替换[关闭]

使用python脚本进行谷歌搜索[关闭]

Python:如何关闭我的 CSV 输入和输出文件? [复制]

如何在 Python 中使用新的 Twitter API 1.1 搜索? [关闭]

如何使用 Python 输出嵌套循环的结果 [关闭]