我已从目录中的一组文件中创建了一个CSV,这些文件以递增方式编号:
img1_1.jpg, img1_2.jpg ... img1_1999.jpg, img1_2000.jpg
CSV输出如下:
filename, datetime
例如:
img1_1.JPG,2011-05-11 09:16:33.000000000
img1_3.jpg,2011-05-11 10:10:55.000000000
img1_4.jpg,2011-05-11 10:17:31.000000000
img1_6.jpg,2011-05-11 10:58:37.000000000
问题是,列表中缺少许多文件,因为某些文件不存在。因此,导入时,实际行号与文件号不匹配。
有人能想到一种合理有效的方法来插入缺失的行,以便行号和文件名匹配,而不是手动插入缺失的行吗? (有超过800个缺失的行)。
背景
以前的程序员开发了一个上传程序脚本,并没有将mysql记录的创建时间保存在数据库中。我认为找到大多数记录的创建时间的最简单方法是输出所有文件的目录列表,并将它们组合在一个电子表格中。
答案 0 :(得分:1)
您完全需要在评论中写下您回答@tadman的内容
一个文本解析器脚本,用于注入缺少的行,例如:反映该记录的日期/时间值是空的,即其后面没有真实数据(例如,将其记录到1950-01-01 00:00:00)。完成后,批量导入CSV。
我认为这必须是最好,最有效的解决方案。
另外,请考虑您的数据可能会发生任何未来的插入/删除/更新事件
这可能会打破你最初的链条,所以你可能更喜欢为jpegs ID引入一个数字字段(并索引该字段),并保持PK“原样”(自动增量)。
在这种情况下,您可以避免CSV操作,以及链接到您的AUTO PK(意味着:如果新的jpeg到达时带有先前已删除的ID或现有ID等,您将不会遇到麻烦)。
因此,解决方案实际上取决于您将来如何使用此表。如果您提供更多详细信息,我相信社区可以提出更多想法。
答案 1 :(得分:0)
如果这是一次性事情,最简单的方法是在电子表格中打开你的csv。
如果上面的表格在sheet1中,你可以在sheet2中放置类似下面的东西(这是openoffice,但是Excel有类似的功能)
pre_filename | filename | datetime
img1_1 | = A2&".JPG" | =OFFSET(Sheet1.$B$1;MATCH(B2;Sheet1.$A$2:$A$4;0);0)
您应该能够选择上面的三个单元格并将它们向下拖动到您需要的多个单元格。