我有2个以下格式的csv文件-
File1
David
Lennon
File2
David 0.3
Lennon 1.3
Wright 2.5
所需的输出-
David 0.3
Lennon 1.3
我正在读取两个csv文件,然后检查文件2中是否存在相同的第一列,如果存在,我想保留它,然后删除其中的其余列,但是我不知道该怎么做第一个元素。
with open ('file1.csv') as h:
an = h.readlines()
with open ('file2.csv') as n:
non = n.readlines()
anno=[]
for i in an:
anno.append(i.decode('utf-8').strip())
diff={}
for i in non:
if i.decode('utf-8')[0].strip() in anno:
diff[i[0]] = i[1]
我认为最后一行出现错误,这不是访问csv文件的第一列和第二列的正确方法。 怎么做?
答案 0 :(得分:1)
首先,如果您使用csv格式,请确保使用逗号分隔值(csv =逗号分隔值)。因此,将file1和file2更改为此:
David
Lennon
和
David,0.3
Lennon,1.3
Wright,2.5
好的,所以如果我是对的,那么您只想从file2中获取在file1中紧迫的数据名称。我将变量的名称更改为隐秘的名称,因为我不明白您的含义,但是为了清楚起见,我将最后一个Dictionary保留为diff(所需的输出)。
现在从文件1中读取名称,并将其放入带有阅读行的列表中,但是“ \ n”中仍然存在一些不需要的内容。我在for循环中将换行符替换为空,然后从列表中创建列表,仅保留名称。
with open ("file1.csv") as file1:
data_file1 = [name.replace("\n", "") for name in file1.readlines()]
对于file2执行相同的操作并创建一个用逗号分隔的列表,因此,“ David,0.3”变为[“ David”,“ 0.3”]。请注意,值的类型仍然是字符串。
with open ("file2.csv") as file1:
data_file2 = [name.replace("\n", "").split(",") for name in file1.readlines()]
现在比较文件1和文件2中的数据:
diff = {}
for line in data_file2:
if line[0] in data_file1:
diff[line[0]] = line[1]
第[0]行是名称,第[1]行是该名称的对应值。
现在diff应该返回
>>> diff
{'David': '0.3', 'Lennon': '1.3'}
干杯, 耶尔