首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两个文件python中找到相同的模式

在两个文件python中找到相同的模式
EN

Stack Overflow用户
提问于 2015-12-14 20:28:52
回答 3查看 121关注 0票数 0

我试图在一个文件中找到一个单词,并在两个不同的文件中搜索这个单词--在第一个文件中搜索该单词,如果找到该单词,则在一个新文件中打印行--在第二个文件中搜索同一个单词,如果发现该单词在第一个文件中的行之后在同一输出文件中打印,并与一个制表分隔。

这就是我写的剧本:

代码语言:javascript
复制
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)

但是我得到的结果总是一个空文件。

代码语言:javascript
复制
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

..。

这是一个搜索文件的例子

代码语言:javascript
复制
contig-39000000
contig-289000379
contig-300000489
contig-310000168
contig-310000172
contig-320000463
contig-324000213
contig-327000055
contig-341000436
contig-342000384
....

预期的结果如下:

代码语言:javascript
复制
contig-39000000 1211    11.3902   out.25

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-14 21:09:08

是的,熊猫比SQLite容易得多。

代码语言:javascript
复制
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含量

代码语言:javascript
复制
contig-39000000 1211    11.3902
contig-44000000 6128    17.8944
contig-91000000 2180    14.2197

file2.txt含量

代码语言:javascript
复制
contig-39000000     out.13
contig-316000330    out.18
contig-316000341    out.25

output.txt含量

代码语言:javascript
复制
contig-39000000 1211    11.3902 out.13
票数 3
EN

Stack Overflow用户

发布于 2015-12-14 21:09:14

一种方法是将前两个文件放入字典中。然后,我们可以循环遍历搜索文档,并查看条目是否是第一个字典中的键。如果是,我们检索值(原始行)并在第二行中搜索它。如果它也在第二个文件中,则将值附加到文本中,然后将其写入文件中。

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2015-12-14 21:09:25

我建议使用熊猫DataFrames,这对于处理更大的数据非常有用。

我的做法如下:

代码语言:javascript
复制
#!/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:

代码语言:javascript
复制
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 (输入文件):

代码语言:javascript
复制
contig-39000000 1211    11.3902
contig-44000000 6128    17.8944
contig-91000000 2180    14.2197

file2.csv (输入文件):

代码语言:javascript
复制
contig-316000330    out.18
contig-39000000 out.25
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34276020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档