难以选择特定行并与特定列合并

时间:2013-07-10 13:49:47

标签: python python-2.7

我有一个文本文件,我有这样的数据

Textfile1

?Cricket|Batsman|EK
Batsman play cricket for batting
?Cricket|Football|E9
Sequence unavailable
?Cricket|Hockey|EN
Sequence unavailable

我只想复制包含Sequence unavailable的数据以及最后一栏EN中提供的问题编号

必需的输出

Sequence unavailable|E9
Sequence unavailable|EN

我不知道如何仅选择Sequence unavailable的具体数据,我会标记所有最后一栏,但难以选择Sequence unavailable及其问题编号

3 个答案:

答案 0 :(得分:0)

这个怎么样:

lastline = None

with open('test.txt', 'r') as f:
    for line in f.readlines():
        if not lastline:
            lastline = line.rstrip('\n')
            continue
        if line.rstrip('\n') == 'Sequence unavailable':
            _, _, id = lastline.split('|')
            print 'Sequence unavailable|' + id
        lastline = None

答案 1 :(得分:0)

使用“|”将第2,第4,6行连接到第一行有多困难sepeartor。 如果它不那么难,那么我有一个快速而肮脏的解决方案。

修改后的数据看起来像..

  

游戏|球员|埋立|结果

     

板球|击球手| EK |击球手打板球击球

     

板球|足球| E9 |序列不可用

     

板球|曲棍球| EN |序列不可用

代码看起来像......

import pandas as pd

a = pd.read_csv("test.txt",sep="|")

c = a[a["Result"] != "Sequence unavailable"]

答案 2 :(得分:0)

您是否只想要数据"序列不可用"?那么也许这会对你有所帮助:

with open("input.txt", "r") as f:
    s = f.read()

output, lines = [], (line for line in s.split("\n"))

for line in lines:
    if line.startswith("?"):
        data = next(lines)
        if data == "Sequence unavailable":
            output.append("{data}|{qn}".format(data=data, qn=line.split("|")[-1]))

with open("output.txt", "w") as f:
    for line in output:
        f.write(line + "\n")