我试图在一个文件中找到一个单词,并在两个不同的文件中搜索这个单词--在第一个文件中搜索该单词,如果找到该单词,则在一个新文件中打印行--在第二个文件中搜索同一个单词,如果发现该单词在第一个文件中的行之后在同一输出文件中打印,并与一个制表分隔。
这就是我写的剧本:
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谢谢
发布于 2015-12-14 21:09:08
是的,熊猫比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.2197file2.txt含量
contig-39000000 out.13
contig-316000330 out.18
contig-316000341 out.25output.txt含量
contig-39000000 1211 11.3902 out.13发布于 2015-12-14 21:09:14
一种方法是将前两个文件放入字典中。然后,我们可以循环遍历搜索文档,并查看条目是否是第一个字典中的键。如果是,我们检索值(原始行)并在第二行中搜索它。如果它也在第二个文件中,则将值附加到文本中,然后将其写入文件中。
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)发布于 2015-12-14 21:09:25
我建议使用熊猫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.2197file2.csv (输入文件):
contig-316000330 out.18
contig-39000000 out.25https://stackoverflow.com/questions/34276020
复制相似问题