Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 读取csv文件一对多关系_Javascript_Java_Python_Excel_Csv - Fatal编程技术网

Javascript 读取csv文件一对多关系

Javascript 读取csv文件一对多关系,javascript,java,python,excel,csv,Javascript,Java,Python,Excel,Csv,我有两个csv文件,其中一个看起来像这样: summary, key, pID, Name, ID xsajssad, abc123, 1234, p1, 12345678 yasdnalskdj, babc123, 234, p1, 312345678 zsadkmas, cabc123, 3234, p1, 212345678 link file://doc/312345678/document1.doc file://doc/312345678/document2.doc file://

我有两个csv文件,其中一个看起来像这样:

summary, key, pID, Name, ID
xsajssad, abc123, 1234, p1, 12345678
yasdnalskdj, babc123, 234, p1, 312345678
zsadkmas, cabc123, 3234, p1, 212345678
link
file://doc/312345678/document1.doc
file://doc/312345678/document2.doc
file://doc/12345678/document3.doc
file://soc/12345678/document1.doc
file://doc/12345678/document2.doc
file://doc/212345678/document112983.doc
我的另一个csv文件如下所示:

summary, key, pID, Name, ID
xsajssad, abc123, 1234, p1, 12345678
yasdnalskdj, babc123, 234, p1, 312345678
zsadkmas, cabc123, 3234, p1, 212345678
link
file://doc/312345678/document1.doc
file://doc/312345678/document2.doc
file://doc/12345678/document3.doc
file://soc/12345678/document1.doc
file://doc/12345678/document2.doc
file://doc/212345678/document112983.doc
我要做的是将我的第一个csv文件更改为相应的ID。该ID嵌入到文件链接中,需要映射回文件1中的唯一ID。这是一个一对多关系,但是我想创建一个新行来匹配第一个文件中的匹配项

summary, key, projectID, projectName, ID, link
xsajssad, abc123, 1234, p1, 12345678, file://doc/12345678/document3.doc
xsajssad, abc123, 1234, p1, 12345678, file://doc/12345678/document1.doc
xsajssad, abc123, 1234, p1, 12345678, file://dpc/12345678/document2.doc
yasdnalskdj, babc123, 234, p1, 312345678, file://doc/312345678/document1.doc
yasdnalskdj, babc123, 234, p1, 312345678, file://doc/312345678/document2.doc
zsadkmas, cabc123, 3234, p1, 212345678, file://doc/212345678/document112983.doc

最有效的方法是什么?

首先读取filepath cvs文件,保存到内存中,然后关闭读取(将此数据集称为1)

然后读取另一个cvs文件,执行相同的操作(数据集2)

然后,遍历数据集1,对于每个id,从数据集2中选择数据,并插入到新文件中

当通过数据集1的循环完成时。删除原始文件,并重命名新文件-从用户的角度来看,这看起来就像您只是修改了它


这是一种比修改更简单的方法,因为插入和修改行需要更多的逻辑。

熊猫可能是最简单的工具:

import pandas as pd
读取第一个文件并声明索引。然后读取第二个文件:

df1 = pd.read_csv('1.csv', sep=',\s*').set_index('ID')     
df2 = pd.read_csv('2.csv')
从文件名中提取数字id,并将其设置为第二个数据帧的索引:

df2.index = df2.link.str.split('/').str[3].astype(int)
通过索引连接两个表,并将索引转换回列:

result = df1.join(df2).reset_index()
result.to_csv('1.csv') # Once you do this, the original contents of 1.csv is gone!

如何知道第一个文件和第二个文件中的哪些行是配对的?通过嵌入在文件LIKI中间的唯一ID来获得这个错误:PANATAS.Error。PARSERORACLE:行18中预期的1个字段,SAW 2。当使用多字符分隔符时,可能会确保忽略引号。脚本希望第一个文件列之间用两个或更多空格分隔。如果不正确,则必须指定分隔符。脚本还希望第二个文件只有一列。第一个csv用逗号分隔,因此我更改了sep=“,”,但现在运行它时,我收到了以下错误:UnicodeDecodeError:“utf-8”编解码器无法解码位置3中的字节0x83:无效的起始字节请在您的问题中包含该文件的实际示例,包括导致错误的同一个文本。因此,不再显示错误,但任何文件中都没有任何更改好的,我喜欢这个计划,最初考虑过这个,现在在python中尝试