如何解决使用阅读行并以某种方式跳过了两个csv文件中的比较的第三列
Old.csv:
name,department
leona,IT
New.csv:
name,IT
lewis,Tax
在相同的两列中,从New.csv中查找新值并使用以下代码更新Old.csv,使其在下面的代码中正常工作
feed = []
headers = []
with open("Old.csv",'r') as t1,open("New.csv",'r') as t2:
for header in t1.readline().split(','):
headers.append(header.rstrip())
fileone = t1.readlines()
filetwo = t2.readlines()[1:] # Skip csv fieldnames
for line in filetwo:
if line not in fileone:
lineItems = {}
feed.append(line.strip()) # For old file update
新问题:
1 /添加第3列以存储时间戳值
2 /跳过两个文件的第三列(时间戳),但仍需要比较两个文件的第一列和第二列的差异
3 /旧文件将使用所有3列的新值进行更新
我尝试了切片方法split(',')[0:2],但似乎根本不起作用。我觉得现有代码只有一些小更新,但不确定如何实现。
预期结果:
Old.csv:
name,department,timestamp
leona,IT,07/20/2020 <--- Existing value
lewis,Tax,08/25/2020 <--- New value from New.csv
New.csv:
name,07/20/2020
leona,07/25/2020
lewis,08/25/2020
解决方法
您可以自己完成所有操作,但是为什么不使用Python内置的工具呢?
from csv import reader
feed = []
with open('Old.csv','r') as t1,open('New.csv','r') as t2:
old = reader(t1)
new = reader(t2)
headers = next(old)
# skip header in new
next(new)
# relevant data is only the first two columns
old_data = [rec[:2] for rec in old]
for rec in new:
if rec[:2] not in old_data:
feed.append(rec)
print(headers)
print(feed)
结果:
['name','department']
[['lewis','Tax']]
请注意,您将使用提供的数据获得此结果,但是如果添加第三列,代码仍将按预期工作,并将该数据添加到feed
结果中。
要使供稿成为字典列表,您可以轻松地将其转换为JSON,可以执行以下操作:
feed.append(dict(zip(headers,rec)))
将feed转换为json很简单:
import json
print(json.dumps(feed))
整个解决方案:
import json
from csv import reader
feed = []
with open('Old.csv','r') as t2:
old = reader(t1)
new = reader(t2)
headers = next(old)
# skip header in new
next(new)
# relevant data is only the first two columns
old_data = [rec[:2] for rec in old]
for rec in new:
if rec[:2] not in old_data:
feed.append(dict(zip(headers,rec)))
print(json.dumps(feed))
输出如下:
[{"name": "lewis","department": "Tax","timestamp": "08/25/2020"}]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。