[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 【已解决】删除同名文件的重复内容

本帖最后由 屡败屡战 于 2018-3-6 18:04 编辑

各位论坛大伽过年好!!
    我有个请求:
    假设有3~5个文件夹,其中各个文件夹内文件是同名的(即文件标题是相同的),其中同名文件中的内容,有80%·90%内容是相同的,多少会有一些出入。
    我想要实现的结果是:在这几个文件夹中,在同名文件之间,若发现有相同的“行”内容,则全部删除不保留,在原始文件中只保留不重复的内容。
    不知遒是否能够实现。

测试文件夹d:\1,d:\2
同文件名不重复的数据输出到d:\3文件夹
Python 3.5
  1. import os
  2. dic = {}
  3. def extract(dirPath='.'):
  4.     for i in os.listdir(dirPath):
  5.         with open('%s\%s' % (dirPath, i), 'r') as file:
  6.             for line in file:
  7.                 if i not in dic:
  8.                     dic[i] = []
  9.                 if line not in dic[i]:
  10.                     dic[i].append(line)
  11.                     
  12. def save(dirpath='.'):
  13.     for i in dic:
  14.         with open(r'%s\%s' % (dirpath, i), 'w') as file:
  15.             file.writelines(dic[i])
  16. #multiple source folder
  17. for i in [r'D:\1',r'D:\2']:
  18.     extract(i)
  19. #save folder
  20. save(r'D:\3')
  21. #print(dic)
复制代码

TOP

  1. #!/usr/bin/python
  2. # -*- coding:utf-8 -*-
  3. #在这几个文件夹中,在同名文件之间,若发现有相同的“行”内容,则全部删除不保留,在原始文件中只保留不重复的内容。
  4. import os
  5. dic = {}
  6. def uniq(dirPath='.'):
  7.     for i in os.listdir(dirPath):
  8.         with open('%s\%s' % (dirPath, i), 'r+') as file:
  9.             print("%s\n%s\n%s" % ('{:*<30}'.format(''), i, '{:*<30}'.format('')))
  10.             f = file.readlines()
  11.             file.seek(0)
  12.             file.truncate()
  13.             for line in f:
  14.                 if i not in dic:
  15.                     dic[i] = []
  16.                 if line not in dic[i]:
  17.                     dic[i].append(line)
  18.                     file.write(line)
  19.                     print(line)
  20. #multiple source folders
  21. for i in [r'D:\1',r'D:\2']:
  22.     uniq(i)
复制代码
1

评分人数

TOP

ivor老师:
你真得很好,热心帮助菜鸟,很感谢!!
同时觉得您的代码好像很高深,麻烦您指点下,代码该“另存为”什么样的后缀名?要下载什么软件运行代码?及如何运行代码??
我的是win7  64位系统。

TOP

回复 5# 屡败屡战


    下载地址:https://www.python.org/ftp/python/3.6.4/python-3.6.4.exe

代码保存后缀    .py

TOP

ivor老师:
请帮忙改个代码,此代码是给多个txt文本内容批量添加顺序数字的,
例如顺数第一行、第二行... 依次添加【0】、【1】、【2】.....等等顺序数字
现在,我要反其道为之。
即“倒数”的第一行、第二行... 依次添加【0】、【1】、【2】.....等等顺序数字
要求顺序数字是由“下”向“上”依次添加的。
如此倒着添加“顺序数字”,便于我日后提取xx行內容。
代码如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /r %%i in (*.txt) do (
  3.    set num=0
  4.    for /f "usebackq delims=" %%a in ("%%~nxi") do (
  5.       echo 【!num!】¥%%a>>temp.txt
  6.       set /a num+=1      
  7.    )
  8.    move temp.txt "%%i"
  9. )
  10. pause  
复制代码
效果图:
修改前:

修改后:

TOP

本帖最后由 ivor 于 2018-2-25 18:06 编辑

回复 7# 屡败屡战
  1. <# :
  2. @echo off
  3. rem 增强代码兼容性,代码保存为 ".bat"、".cmd"、".ps1"均可执行
  4. powershell Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  5. more +8 "%~f0" >"%~dpn0.ps1"
  6. powershell -File "%~dpn0.ps1"
  7. del "%~dpn0.ps1" & pause & exit /b
  8. #>
  9. dir *.txt | foreach {
  10.     $con = get-content $_
  11.     $n = 0
  12.     del $_
  13.     for ($i=$con.Count-1; $i -ge 0; $i-- -and $n++)
  14.     {
  15.         "【{0}】¥{1}" -f $n,$con[$i]
  16.         "【{0}】¥{1}" -f $n,$con[$i] | out-file -FilePath $_ -Append
  17.     }
  18. }
复制代码

TOP

ivor老师:
      此代码运行完美,但我这里有些小问题,我的计算机好像不太支持“powershell 代码”(我安装powershell 文件好多遍,均安装失败)。于是我将此代码“另存为”.bat时,其代码运行只针对“桌面”的文件夹有效。但在其它盘符运行,则无效。自己估计,好傢是本地计算机不支持“powershell 代码”所致。
      望求个“纯”的批处理代码,使其可以在其它盘符运行。

      同样:我的另外求助贴,【求助】批量提取N个文本的倒数任意行内容??
其中,老师的代码(增强代码兼容),也是如此,不知道咋回事??

ivor老师:如果勉为其难,就算了,我将待处理文件移至桌面,代码也可以使用


代码在其他盘符运行错误:

TOP

返回列表