Я пытаюсь найти слово в файле и искать его в двух разных файлах. - найти это слово в первом файле, и если слово найдено, строка печатается в новом файле - искать то же слово во втором файле и, если найдено слово, напечатать строку, найденную во втором файле в том же выходном файле, после строки, найденной в первом файле и отделенной табуляцией .
Это сценарий, который я написал:
for line in first_file:
for line2 in second_file:
for word in keywords:
if re.match (r"\b"+word+r"\b" , line):
result = (line.strip()+'\t'+line2.strip())
print (result, file = new_file)
Но результат, который я получаю, всегда пустой файл.
This is an example of the first file :
contig-39000000 1211 11.3902
contig-44000000 6128 17.8944
contig-91000000 2180 14.2197
this is an example of the second file
contig-316000330 out.18
contig-39000000 out.25
...
И это пример файла поиска
contig-39000000
contig-289000379
contig-300000489
contig-310000168
contig-310000172
contig-320000463
contig-324000213
contig-327000055
contig-341000436
contig-342000384
....
Ожидаемый результат будет выглядеть так:
contig-39000000 1211 11.3902 out.25
Спасибо
3 ответа
Да, панды были намного проще, чем SQLite.
import pandas as pd
# change sep to use '\t' if those files actually are tab-delimited
df1 = pd.read_csv('file1.txt', sep=r'\s+', header=None)
df2 = pd.read_csv('file2.txt', sep=r'\s+', header=None)
result = pd.merge(df1, df2, on=0)
result.to_csv('output.txt', sep='\t', header=False, index=False)
Содержание file1.txt
contig-39000000 1211 11.3902
contig-44000000 6128 17.8944
contig-91000000 2180 14.2197
Содержание file2.txt
contig-39000000 out.13
contig-316000330 out.18
contig-316000341 out.25
Содержание output.txt
contig-39000000 1211 11.3902 out.13
Я бы предложил использовать Pandas DataFrames, которые действительно полезны в Для обработки больших данных.
Мой подход следующий:
#!/usr/bin/env python3
# coding: utf-8
import pandas as pd
# read both input files
df1 = pd.read_csv('file1.csv', delim_whitespace=True, names=['A', 'B'], index_col=0)
df2 = pd.read_csv('file2.csv', delim_whitespace=True, names=['C'], index_col=0)
# concat the DataFrames read generated from the read data on same index
df3 = pd.concat([df1, df2], axis=1)
# print all DataFrames in order to double-check
print(df1)
print(df2)
print(df3)
# write concated DataFrame to output.csv
df3.to_csv('output.csv', header=False, sep='\t')
Этот фрагмент будет использовать два входных файла и создать выходной файл следующим образом:
Output.csv:
contig-316000330 out.18
contig-39000000 1211.0 11.3902 out.25
contig-44000000 6128.0 17.8944
contig-91000000 2180.0 14.2197
File1.csv (входной файл):
contig-39000000 1211 11.3902
contig-44000000 6128 17.8944
contig-91000000 2180 14.2197
File2.csv (входной файл):
contig-316000330 out.18
contig-39000000 out.25
Один из способов сделать это - поместить первые два файла в словари. Затем мы можем просмотреть поисковый документ и посмотреть, является ли запись ключом в нашем первом словаре. Если это так, мы извлекаем значение (исходную строку) и ищем его во второй. Если оно также находится во втором, мы добавляем значение к нашему тексту и затем записываем его в файл.
first_dict = {line.split()[0]: line for line in first_file}
second_dict = {line.split()[0]: line.split()[1] for line in second_file}
for search in search_file:
if search in first_dict:
out_text = first_dict[search]
if search in second_dict:
out_text = out_text + "\t" + second_dict[search]
new_file.write(out_text)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.