prefixes = ['NA:', 'slit uniformity:']
with open('file.txt') as input, open('file.csv', 'w') as output:
for line in input:
for prefix in prefixes:
if line.startswith(prefix):
output.write('[%s] [%s]\n' % (prefix[:-1], line[len(prefix)+1:-1]))
with open(inpath) as fin, open(outpath, 'w') as fout:
w = csv.writer(fout, delimiter=' ')
for text, number in csv.reader(fin, delimiter=':', skipinitialspace=True):
w.writerow((f'[{text}]', f'[{number.strip()}]))
另一方面,这可能更简单,不需要将任何一个文件视为奇怪的CSV方言,只需手动解析和生成行:
with open(inpath) as fin, open(outpath, 'w') as fout:
for line in fin:
text, _, number = line.rstrip().partition(': ')
fout.write(f'[{text}] [{number}]\n')
如果此数据格式恰好与已知格式完全匹配,则可以将其解析为该格式
在示例数据中,文本字段从不包含任何冒号、引号、反斜杠转义符或任何“奇怪”的内容。这保证永远是真的吗
如果是这样的话,这是一个有效的CSV文件,用冒号作为分隔符,用可选的空格作为字段的标题。所以你可以这样分析(你的输出格式对于CSV来说有点奇怪,通常你不能使用单独的“open”和“close”引用字符。但你不是在问输出部分,所以我会作弊一点。)
另一方面,这可能更简单,不需要将任何一个文件视为奇怪的CSV方言,只需手动解析和生成行:
当然,如果有行破坏了格式,那么错误处理就没有那么好了,因为您将格式规范隐式地分布在几行上,而不是显式地将其定义为CSV方言,但这可能不是问题
相关问题 更多 >
编程相关推荐