找到一个精确的字符串并用python保存它和下面的数字

2024-04-28 05:07:07 发布

您现在位置:Python中文网/ 问答频道 /正文

python新手。 我有一个有很多行的文本文件。从中我需要找到2个字符串模式,并保存到csv

示例:

文本文件包含:

NA:        2.0
slit uniformity at power:      3.6
integrated slit uniformity at power: 4.7
slit uniformity:     8.6

以及我想要的csv输出

[NA] [2.0]
[slit uniformity] [8.6]

简而言之,我想在一列中保存一个精确的字符串,在下一列中保存它旁边的数字

提前谢谢


Tags: csv字符串示例模式数字atpower文本文件
2条回答
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]))

如果此数据格式恰好与已知格式完全匹配,则可以将其解析为该格式

在示例数据中,文本字段从不包含任何冒号、引号、反斜杠转义符或任何“奇怪”的内容。这保证永远是真的吗

如果是这样的话,这是一个有效的CSV文件,用冒号作为分隔符,用可选的空格作为字段的标题。所以你可以这样分析(你的输出格式对于CSV来说有点奇怪,通常你不能使用单独的“open”和“close”引用字符。但你不是在问输出部分,所以我会作弊一点。)

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方言,但这可能不是问题

相关问题 更多 >