读取 csv 数据,然后在特定位置附加带有值的文本文件

Read csv data, then append text file with values at specific places

我刚刚开始学习 Python,并没有很好地掌握 Python 中使用的所有功能和方法。希望有人能在这方面给我指点。 问:我正在尝试读取包含多行 x、y 和 z 数据的 CSV 文件。然后我需要获取这些读取值并将它们替换到特定位置的文本文件中。
我可以使用 csv.reader 来读取文件,但我很难找到正确的函数来在我的文本文件中搜索和附加数据。

CSV 文件包含;

X  Y  Z

1 x1 y1 z1

2 x2 y2 z2

3 x3 y3 z3

文本文件包含:

This is first text line.
The data goes here x1 with y1 and z1
also goes here x2 wtih y2 and z2.

作为第一步,我在将数据写入新文本文件方面取得了一些进展:

import csv
testfile = open('Data.csv', "rb")
reader =  csv.reader(testfile)
rownum = 0
file=open("detdata.txt", "w")
for row in reader:
    # Save header row.
    if rownum == 0:
    *
    *

脑残、脆弱、低效且未经测试的解决方案:

source = open("/path/to/textfile.txt").read()
keys = ("x", "y", "z")
reader.next() # discard the headers row
for num, row in enumerate(reader, 1):
    for key, val in zip(keys, row):
        varname = "{0}{1}".format(key, num)
        source = source.replace(varname, val)

更好的解决方案是在文本文件中使用带有 Python 字符串格式标记的模板字符串,即:

This is first text line.
The data goes here {x1} with {y1} and {z1}
also goes here {x2} wtih {y2} and {z2}.

然后将 varname:values 对收集在 dict 中并使用 str.format():

data = dict()
keys = ("x", "y", "z")
reader.next() # discard the headers row
for num, row in enumerate(reader, 1):
    for key, val in zip(keys, row):
        varname = "{0}{1}".format(key, num)
        data[varname] = val

source = open("/path/to/textfile.txt").read()
result = source.format(**data)

但请注意,如果文本中有占位符而 dict 中没有匹配的键,则会出现错误。