用csv文件替换文件中的文本

时间:2016-05-03 07:35:24

标签: python csv

我想用csv文件中的名称替换文本文件中的文本。例如,我有一个文本文件说:

Dear [name here],
Hello . . .. etc etc

一个csv文件,其中有2列,第一个名字在第一个名字,第二个名字在第二个名字中:

Joe Smith
Rachel Cool

我如何读取CSV文件,并用文件中的[name here]替换每个名称?在打开text和csv文件并将名字和姓氏放在变量名中之后,到目前为止我有这个:

for row in f.readlines():
    names = row.split(",")[0], row.split(",")[1]

之后我尝试做这样的事情,但它不起作用:

for row in textfile.readlines():
   print row.replace("[name here]", names)

运行之后,一个TypeError:期望一个字符串或其他字符缓冲区错误。假设因为变量名在第二个for循环中没有定义。

但是我怎样才能读取这两个文件并只替换文本文件中的[name here]?

2 个答案:

答案 0 :(得分:1)

回答你的问题

从这一行开始,

names = row.split(",")[0], row.split(",")[1]

names是两个字符串的元组。但是,在这一行

row.replace("[name here]", names)

您正尝试将其用作单个字符串。

如果你想同时写下第一个/姓氏,你可以按照另一个答案的建议添加它们,但为什么要把它们分开呢?您可能只是在第一个循环中读取它们而不进行拆分(这也解决了三个人的名字(如Herbert George Wells)):

names = row

在第一个循环中,然后

row.replace("[name here]", names)

在第二个循环中。

如果您因为想要单独使用它们而拆分名称,那么我不清楚您想要实现的目标。

请在问题中包含追溯

这里的提示是在追溯中:

TypeError: expected a string or other character buffer error

replace期望一个字符串或类似字符串的东西。你正在喂它一个元组。通常,在这里提问时,最好复制完整的回溯,以便我们知道错误发生的位置。

下一期

现在,您将面临另一个问题:在循环中,您会在每次迭代时删除names

您应该使用列表来存储所有名称:

i = 0
for row in f.readlines():
    names[i] = row
    i += 1

i = 0
for row in textfile.readlines():
    print(row.replace("[name here]", names[i]))
    i += 1

(或者你可能在你的代码中正确地做了这个,但是在为你的问题生成一个简化的例子时你将它剥离了。)

答案 1 :(得分:0)

replace()方法期望第二个参数的字符串,并且你已经传递了一个数组,因此是TypeError。

您可以使用names数组中的两个名称,并使用join方法将它们与中间的空格一起追加。试试这个:

print row.replace("[name here]", ' '.join(names))