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

时间:2015-03-18 15:04:08

标签: python csv text append

我刚开始使用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:
    *
    *

1 个答案:

答案 0 :(得分:0)

Braindead,脆弱,低效和未经测试的解决方案:

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中收集valuesdict对并使用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中没有匹配的键,则会出现错误。