找到一个确切的字符串并在python中保存它和以下数字

时间:2018-04-29 19:18:35

标签: python python-3.x

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]

简而言之,我想在一列中保存一个完整的字符串,并在下一列中保存它旁边的数字。

感谢先进,

2 个答案:

答案 0 :(得分:0)

如果此数据格式恰好与众所周知的格式匹配,则可以将其解析为该格式。

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

如果是这样,这是一个有效的CSV文件,其中分隔符的冒号和字段的可选空格。所以你可以这样解析它。 (你的输出格式对于CSV来说有点奇怪 - 通常你不能使用单独的“打开”和“关闭”引用字符。但你不是在这里询问输出部分,所以我会作弊。)

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

答案 1 :(得分:-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]))