Python 如何获取文本文件中两行之间的数据?

Python 如何获取文本文件中两行之间的数据?,python,pandas,csv,dataframe,text,Python,Pandas,Csv,Dataframe,Text,我有一个名为DATA_out的复杂文本格式输出文件(如下面的示例),我希望在文件中的两行(例如值和总数)数据之间提取数据,并保存为csv。我用用户输入和结束行创建了一个起始行。当我的代码运行时,它知道从哪里开始编写,但我无法导入结束行(“总计”)。我只需要将开始行和结束行添加到重新编译 您对使用用户输入在两行之间获取数据有何建议?这是我的 DATA_out file values DATA_LINE 1 DATA_LINE 2 DATA_LINE 3

我有一个名为DATA_out的复杂文本格式输出文件(如下面的示例),我希望在文件中的两行(例如值和总数)数据之间提取数据,并保存为csv。我用用户输入和结束行创建了一个起始行。当我的代码运行时,它知道从哪里开始编写,但我无法导入结束行(“总计”)。我只需要将
开始行
结束行
添加到
重新编译

您对使用用户输入在两行之间获取数据有何建议?这是我的

DATA_out file
      values
    DATA_LINE 1
    DATA_LINE 2
    DATA_LINE 3
    DATA_LINE 4
total


使用regex,您可以使用
'values(.*)total'
'\n'
-
'values\n(.*)total'

text = '''DATA_out file
      values
    DATA_LINE 1
    DATA_LINE 2
    DATA_LINE 3
    DATA_LINE 4
total
'''

import re

result = re.search('values(.*)total', text, re.DOTALL)

if result:
    print(result[1])
    #print(result.group(1))    

如果没有
regex
,您可以使用
find()
分别查找
值的位置和
总计
,然后用
文本[开始:结束]

text = '''DATA_out file
      values
    DATA_LINE 1
    DATA_LINE 2
    DATA_LINE 3
    DATA_LINE 4
total
'''

start = text.find('values')
end = text.find('total', start)

if start > -1 and end > -1:
    start += len("values")  
    print(text[start:end])

如果您想逐行读取文件

我使用
io.StringIO()
来模拟文件

text = '''DATA_out file
      values
    DATA_LINE 1
    DATA_LINE 2
    DATA_LINE 3
    DATA_LINE 4
total
'''

import io

#f = open("input.txt")
f = io.StringIO(text)

lines = []

# read till you find line with 'values'
for line in f:
    if 'values' in line:
        break

# read till you find line with 'values'
for line in f:
    if 'total' in line:
        break
    lines.append(line)
else: # it is `for/else`, not `if/else`
    #if not found `total` (so there was no `break`) then clear list
    lines = []    

if lines:
    print("".join(lines))    

分享你的研究成果对每个人都有帮助。告诉我们您尝试了什么,以及为什么它不能满足您的需求。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另请参阅:您可以将其分为两个作业:(1)读取行,直到获得与
值的行数;(2)读取并保留行数,直到获得与
总计的行数。使用普通字符串函数,您可以找到
总计
,并使用其位置对文本进行切片-
文本[values\u pos+len(“values”):total\u pos]
对于regex,您应该使用类似于
值(.*)total的东西来获取
total
text = '''DATA_out file
      values
    DATA_LINE 1
    DATA_LINE 2
    DATA_LINE 3
    DATA_LINE 4
total
'''

import io

#f = open("input.txt")
f = io.StringIO(text)

lines = []

# read till you find line with 'values'
for line in f:
    if 'values' in line:
        break

# read till you find line with 'values'
for line in f:
    if 'total' in line:
        break
    lines.append(line)
else: # it is `for/else`, not `if/else`
    #if not found `total` (so there was no `break`) then clear list
    lines = []    

if lines:
    print("".join(lines))