Я работаю над проектом, который требует от меня поиска нескольких ключевых слов в файле. Например, если бы у меня был файл со 100 вхождениями слова «Томатный», 500 для слова «Хлеб» и 20 для «Pickle», я хотел бы иметь возможность искать файл для «Томатов» и «Хлеба» "и получить количество раз, которое оно встречается в файле. Я смог найти людей с тем же вопросом/вопросом, но для других языков на этом сайте.Множественный поиск слов не работает правильно (Python)
Я работающая программа, которая позволяет мне искать имя столбца и подсчитывать, сколько раз что-то появляется в этой колонке, но я хочу сделать что-то более точное. Вот мой код:
def start():
location = raw_input("What is the folder containing the data you like processed located? ")
#location = "C:/Code/Samples/Dates/2015-06-07/Large-Scale Data Parsing/Data Files"
if os.path.exists(location) == True: #Tests to see if user entered a valid path
file_extension = raw_input("What is the file type (.txt for example)? ")
search_for(location,file_extension)
else:
print "I'm sorry, but the file location you have entered does not exist. Please try again."
start()
def search_for(location,file_extension):
querylist = []
n = 5
while n == 5:
search_query = raw_input("What would you like to search for in each file? Use'Done' to indicate that you have finished your request. ")
#list = ["CD90-N5722-15C", "CD90-NB810-4C", "CP90-N2475-8", "CD90-VN530-22B"]
if search_query == "Done":
print "Your queries are:",querylist
print ""
content = os.listdir(location)
run(content,file_extension,location,querylist)
n = 0
else:
querylist.append(search_query)
continue
def run(content,file_extension,location,querylist):
for item in content:
if item.endswith(file_extension):
search(location,item,querylist)
quit()
def search(location,item,querylist):
with open(os.path.join(location,item), 'r') as f:
countlist = []
for search in querylist: #any search value after the first one is incorrectly reporting "0"
countsearch = 0
for line in f:
if search in line:
countsearch = countsearch + 1
countlist.append(search)
countlist.append(countsearch) #mechanism to update countsearch is not working for any value after the first
print item, countlist
start()
Если я использую этот код, последняя часть (def search) работает некорректно. Каждый раз, когда я помещаю поиск в любой поиск после первого ввода, я возвращаю «0», несмотря на то, что в файле содержится до 500 000 вхождений слова поиска.
Мне также было интересно, так как мне нужно индексировать 5 файлов по 1 000 000 строк каждый, если бы я мог написать либо дополнительную функцию, либо что-то, чтобы подсчитать, сколько раз «Салат» происходит по всем файлам.
Я не могу размещать файлы здесь из-за их размера и содержания. Любая помощь будет принята с благодарностью.
Редактировать
У меня есть этот кусок кода здесь. Если я использую это, я получить правильное количество каждого из них, но было бы гораздо лучше иметь пользователь сможет ввести столько поисков, как они хотят:
def check_start():
#location = raw_input("What is the folder containing the data you like processed located? ")
location = "C:/Code/Samples/Dates/2015-06-07/Large-Scale Data Parsing/Data Files"
content = os.listdir(location)
for item in content:
if item.endswith("processed"):
countcol1 = 0
countcol2 = 0
countcol3 = 0
countcol4 = 0
#print os.path.join(currentdir,item)
with open(os.path.join(location,item), 'r') as f:
for line in f:
if "CD90-N5722-15C" in line:
countcol1 = countcol1 + 1
if "CD90-NB810-4C" in line:
countcol2 = countcol2 + 1
if "CP90-N2475-8" in line:
countcol3 = countcol3 + 1
if "CD90-VN530-22B" in line:
countcol4 = countcol4 + 1
print item, "CD90-N5722-15C", countcol1, "CD90-NB810-4C", countcol2, "CP90-N2475-8", countcol3, "CD90-VN530-22B", countcol4
Можете ли вы исправить ваш код вдавливания, пожалуйста. – SiHa
@SiHa Спасибо, что сообщили мне, но я не вижу, где он выключен. Не могли бы вы сообщить мне, пожалуйста? – TobyTobyo
Похоже, вам нужно отступать от линий после определения функций. – alfonso