我有一个文件,其中包含一行未知行数的介绍性文本,然后该文件的其余部分包含数据。在数据块开始之前,有列标题,我也想跳过它们。所以文件看起来像这样:
this is an introduction..
blah blah blah...
...
UniqueString
Time Position Count
0 35 12
1 48 6
2 96 8
...
1000 82 37
我想将时间位置和计数数据记录到单独的文件中。时间位置和计数数据仅在UniqueString
之后出现。
答案 0 :(得分:0)
这是你在找什么?
reduce(lambda x, line: (x and (outfile.write(line) or x)) or line=='UniqueString\n', infile)
工作原理:
infile
[... for line in infile]
writeline()
,则不会触发False
。or
部分,我们设置了触发器,如果找到了所需的行,那么将为下一行和后续行触发writeline
False
答案 1 :(得分:0)
您可以将数据提取并写入另一个文件,如下所示:
select carrier,
PolicyNumber,
sum(AnnualPremium) CurrentYearAnnualPremium
from #totalinforcepremium
group by carrier,
PolicyNumber
order by PolicyNumber
select carrier,
PolicyNumber,
sum(AnnualPremium) PreviousYearAnnualPremium
from #TotalInforcePremiumPreviousYear
group by carrier,
PolicyNumber
order by PolicyNumber
我认为这是非常简单的:文件被打开并且所有行都被读取,列表解析以列表字符串开头切割列表,并且所需的剩余行再次写入文件。
答案 2 :(得分:0)
您可以创建一个generator function(以及更多信息here),为您过滤文件。
它以递增方式运行,因此不需要一次将整个文件读入内存。
def extract_lines_following(file, marker=None):
"""Generator yielding all lines in file following the line following the marker.
"""
marker_seen = False
while True:
line = file.next()
if marker_seen:
yield line
elif line.strip() == marker:
marker_seen = True
file.next() # skip following line, too
# sample usage
with open('test_data.txt', 'r') as infile, open('cleaned_data.txt', 'w') as outfile:
outfile.writelines(extract_lines_following(infile, 'UniqueString'))
如果您使用的是Python 3,可以稍微优化一下,但基本思路是一样的。