如何在Python中读取部分字符串?

时间:2018-08-06 10:07:15

标签: python file

我有一个数据库,其中包含带有文件的文件夹。我设法读取文件并获得包含montage字的特定行...

montage = 0, FP1-F7: EEG FP1-REF -- EEG F7-REF
montage = 1, F7-T3: EEG F7-REF -- EEG T3-REF
montage = 2, T3-T5: EEG T3-REF -- EEG T5-REF
montage = 3, T5-O1: EEG T5-REF -- EEG O1-REF

现在,我希望能够提取逗号和双点之间的内容(即FP1-F7F7-T3,...),但我不知道该怎么做?< / p>

此外,为什么print命令显示的行之间有一个“空格”(以下未显示,但为实数)?

2 个答案:

答案 0 :(得分:1)

获取所需的令牌(注意:这可以与您提供的示例一起使用,如果显示的点之前还有其他逗号或冒号,则将无效):

def parse_line(line):
  start = line.find(',')
  end = line.find(':')
  return line[start+1:end].strip()

您也可以使用正则表达式来执行此操作,但是对于这种情况,IMO可能会显得过大。

然后可以通过列表理解来获取令牌列表:

tokens = [parse_line(l) for l in lines]

其中lines是要分析的行的列表(或者,如果从文本文件中读取,则为文件对象本身)

答案 1 :(得分:0)

使用正则表达式。

.setMaster("yarn-client") \
.set("spark.executor.instances","10") \
.set("spark.executor.cores","4") \
.set("spark.executor.memory","10g") \
.set("spark.driver.memory","8g") \
.set("spark.yarn.executor.memoryOverhead","1200") \
.set("spark.sql.pivotMaxValues", "6000") \
.set("spark.sql.inMemoryColumnarStorage.batchSize", "1000")

输出:

import re
s = """montage = 0, FP1-F7: EEG FP1-REF --  EEG F7-REF
montage = 1, F7-T3:  EEG F7-REF  --  EEG T3-REF
montage = 2, T3-T5:  EEG T3-REF  --  EEG T5-REF
montage = 3, T5-O1:  EEG T5-REF  --  EEG O1-REF """

for i in s.splitlines():
    m = re.search(r",(.*?):", i)     #Get content between , and :
    if m:
        print(m.group(1).strip())