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]
简而言之,我想在一列中保存一个完整的字符串,并在下一列中保存它旁边的数字。
感谢先进,
答案 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]))