【发布时间】:2015-11-29 05:11:11
【问题描述】:
我有一个关于命令行搜索方法的问题。这是我的情况。
-
我有一个数据文件,其中包含一堆 (~36,000) 对象的标识号,如下所示:
# ID 85000213 85000234 85000246 85000247 85000249 85000250 ... -
我还有一个数据文件目录,其中包含有关每个对象的数据,名称如下:
datafileID85000213.csv datafileID85000234.csv datafileID85000246.csv datafileID85000247.csv datafileID85000249.csv datafileID85000250.csv ...
我实际上想检查我的原始 ID 数据文件中的所有对象是否都有一个包含其实际数据的关联 CSV 文件。我这样做的第一个想法是使用 diff 命令来比较这些列表,但为了做到这一点,我需要从我拥有的 ~36,000 个 CSV 文件名中创建一个单列数据文件以便进行比较。一个复杂的问题是,对于我迄今为止尝试使用的大多数命令(mv、cp、ls),我得到了这个:
参数列表太长
有人对此任务有解决方法(或更好的主意)吗?
为了在每个文件名字符串中搜索数字,到目前为止我发现了两件事之一:
-
蟒蛇:
>>> import re >>> idlist ['abcdefg0.dat', 'abcdefg1.dat', 'abcdefg2.dat', 'abcdefg3.dat', 'abcdefg4.dat', 'abcdefg5.dat', 'abcdefg6.dat', 'abcdefg7.dat', 'abcdefg8.dat', 'abcdefg9.dat'] >>> numbers = [] >>> for i in range(len(idlist)): ... numbers.append(re.search(r'\d+',idlist[i]).group()) ... >>> numbers ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
任何帮助将不胜感激!
【问题讨论】:
-
在一个平面目录中处理这么多文件你不觉得麻烦吗?
-
@SylvainLeroux - 它肯定会比替代品慢,但它会起作用。
-
@msw 现代文件系统肯定可以处理每个目录中如此“大量”的文件。然而,我记得很久以前(在……嗯……Win NT4 上)被某些工具(尤其是我们的增量备份实用程序)对此的有限支持所困扰。但也许那些日子也一去不复返了?
-
@Sylvain Leroux - “平面”目录到底是什么意思?
-
@astromax:通过“flat”,Sylvain Leroux 是指将所有 36k 文件保存在一个目录中,而不是将它们拆分到多个子目录中。回到过去 (TM),一些操作系统和/或工具/程序/实用程序在处理具有如此大量文件的目录时会发出嘶哑的声音。这需要将如此大量的文件分布在多个子目录中,每个子目录的文件数不超过(最大限制)。