我想读取csv文件的每一行,并将该行中的每个单词与字符串列表进行匹配。如果该行中出现任何字符串,请将该字符串写在以逗号分隔的行的末尾。 下面的代码没有给我我想要的东西。
file = 'test.csv'
read_files = open(file)
lines=read_files.read()
text_lines = lines.split("\n")
name=''
with open('testnew2.csv','a') as f:
for line in text_lines:
line=str(line)
#words = line.split()
with open('names.csv', 'r') as fd:
reader = csv.reader(fd, delimiter=',')
for row in reader:
if row[0] in line:
name=row
print(name)
f.write(line+","+name[0]+'\n')
一个test.csv示例如下:
A,B,C,D
ABCD,,,
Total,Robert,,
Name,Annie,,
Total,Robert,,
names.csv将显示为:
Robert
Annie
Amanda
我想要的输出是:
A,B,C,D,
ABCD,,,,
Total,Robert,,,Robert
Name,Annie,,,Annie
Total,Robert,,,Robert
当前代码将删除不会导致匹配的行,所以我得到了:
Total,Robert,,,Robert
Name,Annie,,,Annie
Total,Robert,,,Robert
答案 0 :(得分:1)
通过测试row [1]并追加第5列,然后编写,来处理每一行。名单实际上并不是一个csv。如果真的很长,请使用一组进行查找。还要阅读一次以提高效率。
import csv
with open('names.txt') as f:
names = set(f.read().strip().splitlines())
# newline='' per Python 3 csv documentation...
with open('input.csv',newline='') as inf:
with open('output.csv','w',newline='') as outf:
r = csv.reader(inf)
w = csv.writer(outf)
for row in r:
row.append(row[1] if row[1] in names else '')
w.writerow(row)
输出:
A,B,C,D,
ABCD,,,,
Total,Robert,,,Robert
Name,Annie,,,Annie
Total,Robert,,,Robert
答案 1 :(得分:0)
我认为问题是您仅在名称在行中时才写。要解决此问题,请在if条件之外移动书写调用:
if row[0] in line:
name=row
print(name)
f.write(line+","+name[0]+'\n')
我猜该打印语句是出于测试目的?
编辑:再三考虑,您可能还需要在循环内移动name ='',以便在写入每一行后将其重置,这样您就不会从匹配的行中获取名称而渗入到不匹配的行中。 / p>
编辑:决定显示一种实现,该实现应避免连续出现两个匹配名称的(可能)问题:
编辑:将name = row和f.write()中的name [0]调用更改为name = row [0]和f.write()中的name调用
file = 'test.csv'
read_files = open(file)
lines=read_files.read()
text_lines = lines.split("\n")
with open('testnew2.csv','a') as f:
for line in text_lines:
name=''
line=str(line)
#words = line.split()
with open('names.csv', 'r') as fd:
reader = csv.reader(fd, delimiter=',')
match=False
while match == False:
for row in reader:
if row[0] in line:
name=row[0]
print(name)
match=True
f.write(line+","+name+'\n')
答案 2 :(得分:0)
也尝试一下:
导入csv
myFile = open('testnew2.csv','wb +')
writer = csv.writer(myFile)
reader2 = open('names.csv')。readlines()
以open('test.csv')作为File1:
reader1 = csv.reader(File1)
for row in reader1:
name = ""
for record in reader2:
record = record.replace("\n","")
if record in row:
row.append(record)
writer.writerow(row)
break