用python程序匹配文件

2024-05-20 20:21:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文件如下

File1
ids
CID5265
CID7263
CID9289
....

File 2
ids
CID7363  3.5e-06 -3837 
CID5265  4.5      -938
CID9289  8.9      -9873
....

我想比较file1和file2,以匹配file1中的任何id是否存在于file2中如果是,我应该按如下方式打印整行

CIDS9289  8.9  -9873
....

为了实现这个目标,我们编写了如下python脚本

infile = open("file1","r")

searchtxt = open("file2.txt","r")

for line in infile.readlines():

    if searchtxt in line:

       print line

但我给出了以下错误

Traceback (most recent call last):
  File "finding_words.py", line 7, in <module>
    if searchtxt in line:
TypeError: 'in <string>' requires string as left operand, not file

我知道我犯了一个很简单的错误,但没能弄明白。有人能告诉我怎么解决这个问题吗。。你知道吗

提前谢谢


Tags: 文件inidsstringif错误lineopen
3条回答

使用以下选项:

print [line for id in searchTxtData for line in inFileData if id.strip() in line]

或与语句一起使用:

ids = [id.strip() for id in open("file1.txt","r") if id.strip()]

with open("file2.txt","r") as dataFile:
    for line in dataFile:            
        if line.strip() and line.split()[0] in ids:
           print line
# Usage: foo.py ID_FILE DATA_FILE

ids = set()
with open(sys.argv[1]) as id_file:
    ids = set(line.strip() for line in id_file)

with open(sys.argv[2]) as data_file:
    for line in data_file:
        if line.split()[0] in ids:
            print line,

程序失败是因为searchtxt是文件对象,而不是字符串。大概,您希望在该文件对象上添加另一个循环,检查从line中的searchtxt读取的文本。你知道吗

相关问题 更多 >