【发布时间】:2017-05-12 06:09:09
【问题描述】:
我已经为这个任务苦苦挣扎了很长一段时间,在这里我请求一些关于如何解决我的问题的指导。
为了提供一些背景信息,我有大约 60'000 个文件正在尝试重新组织。我有 2 个要使用的 CSV 文件。
file1.csv
id | path | objectid | image path
1 | path/to/file1 | 4123 | http://url./image1.jpg
2 | path/to/file2 | 5111 | http://url./image2.jpg
...(about 60'000 rows)
file2.csv
objectid | categoryid | termid | Description | parent
4123 | 8302 | 14 | Category1 | 10
4123 | 5123 | 66 | Category2 | 14
所以第二个文件可以有多个具有相同 objectid 的行(在 file1 中,每行只有 1 个)。这使得使用 parent -> termid 创建的子类别可用。 Categoryid 只是类别名称的 id,但父列正在查看 termid 以确定它的父级。
所以我想要实现的是以下内容:从 file1.csv 获取文件路径,通过它的 objectid 找到 file2.csv 中具有相同 objectid 的所有行,根据父编号对它们进行排序(低位优先) 并将在同一行上以正确顺序(用 / 分隔)的每个描述添加到 file1 中的现有路径。最终它会从同一行下载一个图像并将其移动到文件系统中,但我正在努力获得制作文件名的东西。
这是我现在拥有的代码:
import csv
main_dict = {}
with open('files1.csv', newline='', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
filepath = row[1]
objectid = row[2]
imagepath = "http://url.com" + row[3] + "_0001.jpg"
key = row[2]
main_dict[key] = row[1]
#print(main_dict)
second_dict = {}
with open('file2.csv', newline='', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
key = row[0]
second_dict[key] = row[3]
print(second_dict)
for key in main_dict:
if key in second_dict:
print(second_dict[key] + '/' + main_dict[key] )
我可能会朝着完全错误的方向前进,因此我们将不胜感激任何帮助。
P.S 我用的是 Python3.5
非常感谢!
【问题讨论】:
-
欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 on topic 和 how to ask 在这里申请。 Stack Overflow 是针对您的代码的明显问题,而不是推测性的实现帮助。您可能需要 CodeReview.StackExchange.com
-
这听起来像是一个非常数据库化的解决方案,数据库可能比您读入内存的 csv 文件更好吗?
-
也许……但是这是一次性的事情,以后我不需要再这样做了……虽然我确实在数据库中有数据……
-
旁白:请以原始形式发布数据。您的示例使用管道,但您的代码使用默认的逗号分隔符。假设您的数据实际上有逗号,任何想要使用您的示例作为输入的人都必须将它们返回到您最初拥有它们的形式。这也使得您很难知道您是否需要从值中去除空格——是吗?真的在那里,还是您出于某种原因自己添加了它?等等。
-
是逗号,我只是以它为例,以直观的方式画出数据的样子……
标签: python sorting csv dictionary