<p>我的解决方案是粗糙的,可能不适用于角落案件,但这是一个良好的开端。在</p>
<pre><code>import re
import csv
strings = ("Frequency", "Symbol", "Polar", "Mod", "FEC", "RF", "Signal", "Carrier", "BitRate")
sat_raw = open('/BLScan/reports/1520.txt', 'r')
sat_out = open('1520out.txt', 'w')
csv_writer = csv.writer(sat_out)
csv_output = []
for line in sat_raw:
if any(s in line for s in strings):
try:
m = re.match(r'^.*:\s+(\S+)', line)
value = m.groups()[0]
# Attempt to convert to int, thus removing the decimal part
value = int(float(value))
except ValueError:
pass # Ignore conversion
except AttributeError:
pass # Ignore case when m is None (no match)
csv_output.append(value)
elif line.startswith('TP N'):
# Before we start a new set of values, write out the old set
if csv_output:
csv_writer.writerow(csv_output)
csv_output=[]
# If we reach the end of the file, don't miss the last set of values
if csv_output:
csv_writer.writerow(csv_output)
sat_raw.close()
sat_out.close()
</code></pre>
<h3>讨论</h3>
<ul>
<li>csv包有助于csv输出</li>
<li>re(正则表达式)模块帮助解析行并从行中提取值。在</li>
<li>在<code>value = int(...)</code>的行中,我们试图将字符串值转换为整数,从而删除点和后面的数字。在</li>
<li>当代码遇到以“tpn”开头的行时,这表示一组新值。我们将旧的值集写入CSV文件。在</li>
</ul>