标题: [文本处理] 【已解决】删除同名文件的重复内容 [打印本页]
作者: 屡败屡战 时间: 2018-2-24 20:14 标题: 【已解决】删除同名文件的重复内容
本帖最后由 屡败屡战 于 2018-3-6 18:04 编辑
各位论坛大伽过年好!!
我有个请求:
假设有3~5个文件夹,其中各个文件夹内文件是同名的(即文件标题是相同的),其中同名文件中的内容,有80%·90%内容是相同的,多少会有一些出入。
我想要实现的结果是:在这几个文件夹中,在同名文件之间,若发现有相同的“行”内容,则全部删除不保留,在原始文件中只保留不重复的内容。
不知遒是否能够实现。
作者: ivor 时间: 2018-2-24 23:22
测试文件夹d:\1,d:\2
同文件名不重复的数据输出到d:\3文件夹
Python 3.5
- import os
-
- dic = {}
- def extract(dirPath='.'):
-
- for i in os.listdir(dirPath):
- with open('%s\%s' % (dirPath, i), 'r') as file:
- for line in file:
- if i not in dic:
- dic[i] = []
- if line not in dic[i]:
- dic[i].append(line)
-
- def save(dirpath='.'):
- for i in dic:
- with open(r'%s\%s' % (dirpath, i), 'w') as file:
- file.writelines(dic[i])
-
- #multiple source folder
- for i in [r'D:\1',r'D:\2']:
- extract(i)
-
- #save folder
- save(r'D:\3')
- #print(dic)
复制代码
作者: ivor 时间: 2018-2-25 10:40
- #!/usr/bin/python
- # -*- coding:utf-8 -*-
- #在这几个文件夹中,在同名文件之间,若发现有相同的“行”内容,则全部删除不保留,在原始文件中只保留不重复的内容。
-
- import os
-
-
- dic = {}
- def uniq(dirPath='.'):
-
- for i in os.listdir(dirPath):
- with open('%s\%s' % (dirPath, i), 'r+') as file:
- print("%s\n%s\n%s" % ('{:*<30}'.format(''), i, '{:*<30}'.format('')))
- f = file.readlines()
- file.seek(0)
- file.truncate()
- for line in f:
- if i not in dic:
- dic[i] = []
- if line not in dic[i]:
- dic[i].append(line)
- file.write(line)
- print(line)
-
- #multiple source folders
- for i in [r'D:\1',r'D:\2']:
- uniq(i)
复制代码
作者: 屡败屡战 时间: 2018-2-25 12:49
ivor老师:
你真得很好,热心帮助菜鸟,很感谢!!
同时觉得您的代码好像很高深,麻烦您指点下,代码该“另存为”什么样的后缀名?要下载什么软件运行代码?及如何运行代码??
我的是win7 64位系统。
作者: ivor 时间: 2018-2-25 12:58
回复 5# 屡败屡战
下载地址:https://www.python.org/ftp/python/3.6.4/python-3.6.4.exe
代码保存后缀 .py
作者: 屡败屡战 时间: 2018-2-25 16:10
ivor老师:
请帮忙改个代码,此代码是给多个txt文本内容批量添加顺序数字的,
例如顺数第一行、第二行... 依次添加【0】、【1】、【2】.....等等顺序数字
现在,我要反其道为之。
即“倒数”的第一行、第二行... 依次添加【0】、【1】、【2】.....等等顺序数字
要求顺序数字是由“下”向“上”依次添加的。
如此倒着添加“顺序数字”,便于我日后提取xx行內容。
代码如下:- @echo off&setlocal enabledelayedexpansion
- for /r %%i in (*.txt) do (
- set num=0
- for /f "usebackq delims=" %%a in ("%%~nxi") do (
- echo 【!num!】¥%%a>>temp.txt
- set /a num+=1
- )
- move temp.txt "%%i"
- )
- pause
复制代码
效果图:
修改前:
修改后:
作者: ivor 时间: 2018-2-25 17:43
本帖最后由 ivor 于 2018-2-25 18:06 编辑
回复 7# 屡败屡战 - <# :
- @echo off
- rem 增强代码兼容性,代码保存为 ".bat"、".cmd"、".ps1"均可执行
- powershell Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
- more +8 "%~f0" >"%~dpn0.ps1"
- powershell -File "%~dpn0.ps1"
- del "%~dpn0.ps1" & pause & exit /b
- #>
- dir *.txt | foreach {
- $con = get-content $_
- $n = 0
- del $_
- for ($i=$con.Count-1; $i -ge 0; $i-- -and $n++)
- {
- "【{0}】¥{1}" -f $n,$con[$i]
- "【{0}】¥{1}" -f $n,$con[$i] | out-file -FilePath $_ -Append
- }
- }
复制代码
作者: 屡败屡战 时间: 2018-2-25 20:09
ivor老师:
此代码运行完美,但我这里有些小问题,我的计算机好像不太支持“powershell 代码”(我安装powershell 文件好多遍,均安装失败)。于是我将此代码“另存为”.bat时,其代码运行只针对“桌面”的文件夹有效。但在其它盘符运行,则无效。自己估计,好傢是本地计算机不支持“powershell 代码”所致。
望求个“纯”的批处理代码,使其可以在其它盘符运行。
同样:我的另外求助贴,【求助】批量提取N个文本的倒数任意行内容??
其中,老师的代码(增强代码兼容),也是如此,不知道咋回事??
ivor老师:如果勉为其难,就算了,我将待处理文件移至桌面,代码也可以使用
代码在其他盘符运行错误:
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |