我已经写下了一段代码来获取科学文献,给出代码以获取“xml”文件并从大文件中提取所需的数据或行。
从这个文件我想要打印两行包含标签“AbstractText”或“Title”,当我使用“AbstractText”或“Title”和“if”时它打印出理想的输出但当我同时使用两者时带有“或”语句代码的标签开始打印所有行。
未正确运行的代码:
<?php
namespace App\Cart\Providers;
use App;
use Illuminate\Support\ServiceProvider;
class CartServiceProvider extends ServiceProvider
{
/**
* Register the service provider.
* @return void
*/
public function register()
{
App::bind('App\Cart\Interfaces\CartServiceInterface', function () {
return new \App\Cart\Services\CartService(app('cart'));
});
}
}
代码使用“AbstractText”标记正确运行:
def fetch_abstract(pmid):
handle = efetch(db='pubmed', id=pmid, retmode='xml')
lines = handle.readlines()
for line in lines:
if "<AbstractText>" or "<Title>" in line:
print line,
fetch_abstract("19555725")
代码使用“标题”标记正确运行:
def fetch_abstract(pmid):
handle = efetch(db='pubmed', id=pmid, retmode='xml')
lines = handle.readlines()
for line in lines:
if "<AbstractText>" in line:
print line,
fetch_abstract("19555725")
我该如何解决这个问题?
答案 0 :(得分:3)
您应该将in line
用于两者:
if "<AbstractText>" in line or "<Title>" in line:
你现在的方式有两个以下条件:
"<AbstractText>" or
"<Title>" in line
且"<AbstractText>"
始终为true
,因为string
"<AbstractText>"
包含某些内容(if "nonemptystring"
始终为true
)。这就是你打印所有内容的原因。
答案 1 :(得分:0)
一种正确的方法是写:
if "<AbstractText>" in line or "<Title>" in line:
您的第一次尝试相当于if ("<AbstractText>") or ("<Title>" in line):
。我添加了括号来强调如何解释这条线。
答案 2 :(得分:0)
而不是
if "<AbstractText>" or "<Title>" in line:
使用
if "<AbstractText>" in line or "<Title>" in line:
答案 3 :(得分:0)
编辑:修正了语法错误 试试这样:
def fetch_abstract(pmid):
handle = efetch(db='pubmed', id=pmid, retmode='xml')
lines = handle.readlines()
for line in lines:
if "<AbstractText>" in line or "<Title>" in line:
print line,
fetch_abstract("19555725")