python - 检查所有文件是否存在

标签 python bash csv diff

我对命令行搜索方法有疑问。这是我的情况。

  1. 我有一个数据文件,其中包含一堆 (~36,000) 个对象的标识号,如下所示:

    # ID
    85000213
    85000234
    85000246
    85000247
    85000249
    85000250
    ...
    
  2. 我还有一个数据文件目录,其中包含有关每个对象的数据,其名称如下:

    datafileID85000213.csv
    datafileID85000234.csv
    datafileID85000246.csv
    datafileID85000247.csv
    datafileID85000249.csv
    datafileID85000250.csv
    ...
    

我实际上想检查原始 ID 数据文件中的所有对象是否都有一个包含其实际数据的关联 CSV 文件。我这样做的第一个想法是使用 diff 命令来比较这些列表,但为了做到这一点,我需要从我拥有的 ~36,000 个 CSV 文件名中制作一个单列数据文件,以便与之进行比较。一个复杂的问题是,对于到目前为止我尝试使用的大多数命令(mv、cp、ls),我得到了这个:

Argument list too long

有人对此任务有解决方法(或更好的主意)吗?

为了搜索每个文件名字符串中的数字,到目前为止我发现了以下两种情况之一:

  1. python :

    >>> 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']
    
  2. 庆典:UNIX BASH: extracting number from string

任何帮助将不胜感激!

最佳答案

来自 bash:

{
   # Read the header into a variable, but ignore it
   read -r hdrLine
   while read -r fileID; do
      [[ -f $DIRECTORY/datafileID$fileID.csv ]] || echo "$fileID not found"
   done
} < id_list.txt

{...} 中的所有内容均从文件 id_list.txt 中读取。第一个 read 语句读取并丢弃 header 。 while 循环然后从文件中读取剩余的行,一次一个。将 DIRECTORY 设置为文件所在目录的名称(或替换为硬编码路径,由您选择),它会检查名称为 datafileID$fileID.csv 的文件 存在于该目录中。如果是这样,什么也不会发生。否则,将向标准输出打印一条消息。

您可以使用文件 glob 执行更一般的检查。

[[ -f $DIRECTORY/*$fileID* ]]

将检查名称中任何位置包含 $fileID 的文件是否存在。

关于python - 检查所有文件是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16990684/

相关文章:

python - 从两个离散函数中获得最大值的最短 Python 代码是什么?

linux - 有没有办法检查某个选项是否对某个程序有效?

linux - 递归检查shell中文件之间的差异

python - BeautifulSoup 选择 sibling 不工作

python - 按值列表的平均值对字典进行排序

Python-使用导入的 CSV 数据自动变量命名

bash - 在 bash 脚本中引用 rsync 的排除项时出现问题

linux - 提取 pcap 文件中的字节范围

MYSQL+加载数据INFILE+检查字段

python - 使用 csv.DictReader 进行迭代