Board logo

标题: [文本处理] 比较文件内容,请大神们给个思路 [打印本页]

作者: dailyad    时间: 2020-5-22 15:32     标题: 比较文件内容,请大神们给个思路

本帖最后由 dailyad 于 2020-5-22 17:19 编辑

我现在下载了4个数据的smiles格式数据,打开后里面里面才一行,以空格结尾,如:
  1. C([C@@H](C(=O)O)N)c1ncn(C)c1
复制代码
四个数据的命名规律都不一样,每个数据库文件1-2万,现在想去掉重复的项,思路有两个,请大神们指导一下
1.先提取文件名+数据,保存为CSV,再想办法处理
2.批处理遍历比较内容,输出有相同内容的文件名称。
作者: wujunkai    时间: 2020-5-22 22:01

可以先以文件大小来排序,再根据大小去重,cmd好像是有提供一个命令来判断文件是否相同的,自己help看看
作者: dailyad    时间: 2020-5-23 14:51

可以先以文件大小来排序,再根据大小去重,cmd好像是有提供一个命令来判断文件是否相同的,自己help看看
wujunkai 发表于 2020-5-22 22:01



    仔细比较了一下,有一些文件空格后面还可能带有字符,此外,相通大小的文件超级多,所以比较大小不是很靠谱,搜索空格前面的字符,看起来工作量很大。
作者: ivor    时间: 2020-5-23 17:59

powershell利用文件hash值,判断文件是否完全一样。
  1. Get-FileHash *.smiles | Group-Object -Property Hash | Where-Object Count -GE 2
复制代码

作者: went    时间: 2020-5-25 11:39

只有一行数据,可以根据数据内容排序,再做比较,进行分组.ASNI
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. REM smiles文件夹
  4. set "dir=C:\Users\lenovo\Desktop\新建文件夹"
  5. set "code=( for /r "%dir%" %%i in ("*.smiles"^) do @( for /f "usebackq delims=" %%a in ("%%i"^) do @( echo %%a#%%i ^)^)^) ^| sort"
  6. set "word="
  7. for /f "tokens=1* delims=#" %%i in ('%code%') do (
  8. if not "%%i"=="!word!" (
  9. echo ------------------
  10. set "word=%%i"
  11. echo 内容:!word!
  12. echo 文件:
  13. echo. %%j
  14. ) else echo. %%j
  15. )
  16. echo ---------
  17. pause&exit
复制代码

作者: dailyad    时间: 2020-5-27 18:47

多谢二位




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2