【问题标题】:Search a string in a certain column & use the string in column 1 in the same row在某一列中搜索字符串,并在同一行中使用第 1 列中的字符串
【发布时间】:2017-10-03 13:55:55
【问题描述】:

我正在尝试为一些谱系分析编写脚本。

家谱文件

我有三个制表符分隔的列(IndividualID、FatherID、motherID),像这样(+- 200 行):

AstorSjefVN   | SjefFtS      | LunaVN   
SjefFtS       | LarsCedaVdDD | MerelFtS  
LunaVN        | CasperVdH    | WinnieVtVB  
LarsCedaVdDD  | CecoVO       | AidaFtS  
MerelFtS      | NimkoVtN     | FamkeFtS  
CasperVdH     | SammyVdH     | DonnaVdH  
WinnieVtVB    | EllertVO     | MeejkeVdH  
CecoVO        | BoaikeVhK    | FokaVO  
AidaFtS       | GovertDK     | CindyVdSJ  
NimkoVtN      | DrepaVtB     | LetahVtOH  
FamkeFtS      | CaesarFtS    | FardiFtS  

问题

我想在第 2 列和第 3 列中搜索一个字符串(例如,CaesarFtS)。如果该字符串出现在其中一列中,我接下来想继续使用同一行的第 1 列中的字符串(在这种情况下为FamkeFtS),因此我可以再次在第 2 列和第 3 列中搜索这个新字符串等等。我想为此使用 while 循环,但我找不到如何在特定列中搜索字符串并继续使用同一行第 1 列中的字符串。
研究,我发现使用 Pandas 可能就位?我对python很陌生,所以希望你能帮助我!

【问题讨论】:

  • while-loop for this - 发布你当前的代码

标签: python string csv


【解决方案1】:
end_of_tree = False
search_string = 'WinnieVtVB'

while not end_of_tree:
    with open('pedigree', 'r') as infile:
        for line in infile.readlines():
            if search_string in [x.rstrip() for x in line.split(' | ')[1:]]:
                print('%s match found in line: %s' % (search_string, line))
                search_string = line.split(' | ')[0]
                break
        else:
            print('No FatherID or MotherID found for: %s' % search_string)
            end_of_tree = True

>> WinnieVtVB match found in line: AlanTEST | CasperVdH | WinnieVtVB
>> AlanTEST match found in line: MerelFtS | NimkoVtN | AlanTEST
>> MerelFtS match found in line: SjefFtS | LarsCedaVdDD | MerelFtS
>> SjefFtS match found in line: AstorSjefVN | SjefFtS | LunaVN
>> No FatherID or MotherID found for: AstorSjefVN

使用的示例输入文件:

AstorSjefVN | SjefFtS | LunaVN
SjefFtS | LarsCedaVdDD | MerelFtS
AlanTEST | CasperVdH | WinnieVtVB
LarsCedaVdDD | CecoVO | AidaFtS
MerelFtS | NimkoVtN | AlanTEST
CasperVdH | SammyVdH | DonnaVdH
WinnieVtVB | EllertVO | MeejkeVdH
CecoVO | BoaikeVhK | MerelFtS
AidaFtS | GovertDK | CindyVdSJ
NimkoVtN | DrepaVtB | LetahVtOH
FamkeFtS | CaesarFtS | FardiFtS

【讨论】:

  • 非常感谢!这确实是我想使用的 while 循环。效果很好。
【解决方案2】:

我会指出正则表达式字符串比较的方向。随着您继续使用 Python 或任何语言。正则表达式(正则表达式)允许复杂的字符串搜索和向后查找,就像您在这里似乎想要做的那样。

有许多学习正则表达式的演示,这里是我最喜欢的网站try out regex 上的数据样本。

您还可以使用 python 函数将每一行数据传递给它,如果您的字符串匹配,那么您可以返回您想要的部分。

【讨论】:

  • 谢谢你的提示,我去看看网站!
猜你喜欢
  • 2014-12-10
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 2020-07-07
相关资源
最近更新 更多