我想用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]?
答案 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))