有2个文件client.csv(15gb 1.6亿行)和phone.csv。
客户端. csv文件示例:
| 身份证|名称|电子邮件|合同号|地址标识|
| - -------------|- -------------|- -------------|- -------------|- -------------|
| 一百二十三|普金·瓦夏|www.example.com Pupkin_Vasya@mail.ru五二八三五一二| 43784578 | 5283512 |
以下是一个电话. csv文件的示例:
| 身份证|电话|
| - -------------|- -------------|
| 一百二十三|7999999999|
最后我们应该得到:
| 身份证|电话|名称|电子邮件|
| - -------------|- -------------|- -------------|- -------------|
| 一百二十三|7999999999|普金·瓦夏|www.example.com Pupkin_Vasya@mail.ru|
我只需要在csv或SQLite表中写入所需的数据。
从理论上讲,我需要读取带数字的那个,并使用它的id从另一个文件中浏览数据,但如何做到这一点并不清楚。
我试了这个代码:
df_1 = pd.DataFrame({'id':[123], 'name': ['Pupkin Vasya'], 'email': ['Pupkin_Vasya@mail.ru'], 'usless_info': [1]})
df_2 = pd.DataFrame({'id':[123], 'phone': [79999999999], 'usless_info': [1]})
df = pd.merge(left=df_2[['id', 'phone']], right=df_1[['id', 'name', 'email']], how='left', on='id')
df.to_csv('final.csv', index=False)
但文件比我的内存容量大
我需要找到一个不使用Pandas库的解决方案
UPD:如果文件client.csv中的id在文件phone.csv中没有数据,则文件client.csv中的数据将转到最终文件,但“phone”列仍为空
3条答案
按热度按时间pcrecxhr1#
下面是伪Python中的一个解决方案:
3okqufwl2#
这里有一些应该非常接近解决方案的东西(不幸的是,我没有实际的文件来测试)。基本思想是同时迭代两个输入文件,根据
id
字段保持它们同步,并在执行时编写输出文件。ztmd8pv53#
可以使用
csv.DictReader
。您可以打开3个文件-client.csv
,phone.csv
和final.csv
。然后需要读取
client.csv
并将其存储在字典中。然后,您可以迭代
phone.csv
并检查是否在字典中找到该键。如果找到,则可以使用所需值更新字典。代码如下-