【问题标题】:Splicing a list of strings by certain value index in python在python中通过某个值索引拼接字符串列表
【发布时间】:2018-10-24 03:14:21
【问题描述】:

我有一系列格式如下的文本文件

Transaction Summary
Joe buys from Mindy 5 apples for 6$
Mark buys from Alex 3 apples for 5$
...
END

苹果交易的数量可能是可变的——一个文本文件可能有 2 个,其他的可能有 6 个——但文件的格式都相同。 我想基本上存储事务摘要和结束之间的行。

我首先咨询了this method,它允许我打印所说的行,但我不知道如何存储这些行。

相反,我决定只读取整个文本文件并存储,然后修剪我需要的数据

with open(filename) as f:
    data = f.readlines()
f.close

这样我可以拼接这个字符串列表。我遇到的问题是,虽然我知道从哪里开始拼接(第 1 行索引),但由于每个文本文件都有可变数量的事务,我不知道如何选择具有“END”的特定索引" 里面的字符串。

任何意见都将不胜感激——谢谢!

【问题讨论】:

    标签: python string dataframe


    【解决方案1】:

    data.txt

    Transaction Summary
    Joe buys from Mindy 5 apples for 6$
    Mark buys from Alex 3 apples for 5$
    END
    

    代码

    with open('data.txt') as file:
        lines = file.readlines()
    
    transaction = []
    for line in lines[1:-1]:
        tokens = line.split(' ')
        transaction.append((
            tokens[0], 
            tokens[3], 
            int(tokens[4]),
            int(tokens[7].rstrip('$\n')) ))
    
    print(transaction)
    

    结果

    [('Joe', 'Mindy', 5, 6), ('Mark', 'Alex', 3, 5)]
    

    【讨论】:

    • 谢谢——我最初的计划是使用 ntlk tokenize!问题——如果我的文本文件实际上没有在 END 行结束——假设它后面有我不关心的无关行,我如何将行索引 (-1) 设置为专门停止在一个变量但已知的字符串点(假设它读取字符串 END 时)?
    • 您必须明确地找到带有 END 的行
    • 谢谢——我使用了 enumerate() 来查找停止位置并将该值存储为索引!
    【解决方案2】:

    您可以尝试使用正则表达式。

    import re
    
    string = """ 
    Transaction Summary
    Joe buys from Mindy 5 apples for 6$
    Mark buys from Alex 3 apples for 5$
    END
    """
    print(re.findall(r"(\w+) buys from (\w+) (\d+) apples for (\d+)",string))
    # [('Joe', 'Mindy', '5', '6'), ('Mark', 'Alex', '3', '5')]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 2018-05-12
      • 2018-07-31
      相关资源
      最近更新 更多