我想使用Python从temp.txt文件中提取由标题定义的文本块。
temp.txt如下所示,其中header1(year)和header2(month)由分隔符'tab = / t'分隔:
header1="2016"/theader2="Jan"
Lion Animal
Apple Food
.end
header1="2016"/theader2="Feb"
Tiger Animal
Orange Food
.end
我编写了一个脚本,如下所示(cmd:python script.py [year] [month] with argvs),但是这允许我仅为指定的(月,年)提取数据,并且有限制通配月(或年)来提取所有文本。 (例如,如果我尝试使用python script.py [year] *进行通配符月份,则无效。)有更好的方法吗?
import pandas as pd
import re
import sys
year = sys.argv[1]
month =sys.argv[2]
with open('./temp.txt') as infile, open('./output', 'w') as outfile:
copy = False
for line in infile:
if line.strip() == 'header1="%s"\theader2="%s"' % (year,month):
copy = True
elif line.strip() == '.end':
copy = False
elif copy:
outfile.write(line)
pd.read_csv('./output', encoding='utf8', sep='\;', dtype='unicode').to_excel('./output.xlsx', sheet_name='sheet2', index=False)
答案 0 :(得分:0)
您可以在脚本中添加通配符:
if ((year == '*' or ('header1="%s"' % year) in line.strip()) and
(month == '*' or ('header2="%s"' % month) in line.strip())
):
copy = True
从bash调用时,您需要转义或引用星号,以便它不会扩展到文件列表,例如:
python script.py [year] \*
python script.py [year] '*'
程序的一般形状是正确的,但至少需要:
你的脚本几乎就是这样,所以我不会太担心优化它。