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