我有一个txt文本文档,这个文档有10w行,我需要重第5w删除到第1w行,我如果通过手动选中去删除话,选完这些要删除的数据都要好几分钟,很麻烦,也没有快速便捷的删除方式?
shell或者python写个脚本就可以的啊
import os
# delete_lines(源文件夹,目标文件夹,删除的起始行,删除的终止行)
def delete_lines(source,target,begin,end):
for root,dirs,files in os.walk(source):
for file in files:
f1=open(os.path.join(root,file),"rb") # 打开源文件
f2=open(os.path.join(target,file),"wb") # 打开目标文件
count=0
while count < (begin-1):
current_line=f1.readline()
f2.write(current_line) # 将被删除部分之前的每一行写入新文件
count+=1 # while循环结束后,光标位于被删除部分首行
for i in range(end-begin+2): # 移动光标 跳至被删除部分的下一行
next_line=f1.readline()
while next_line:
f2.write(next_line)
next_line=f1.readline() # 将被删除部分之后的每一行写入新文件
f1.close()
f2.close()
if __name__ == '__main__':
source_path = r'F:\Annotations'
target_path = r'F:\My_Annotations'
delete_lines(source_path,target_path,26,37) # 删除26-37行
print('finish!')
参考如下链接进行修改可完成删除txt文本文件第5000到第10000行,具体办法是通过逐行读取原文件,然后写入新文件,当第5000到10000行时不写入新文件,然后就循环结束,删除原文件,把新文件的文件名重命名为旧文件名,如此实现删除原文件第5000到第10000行的目的,测试txt文件为网络下载的网络小说(仅用于代码测试),代码如下:
参考链接:
https://bbs.csdn.net/topics/250043211
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
public class deleteTxtSomeLine {
//https://bbs.csdn.net/topics/250043211
public static void main(String[] args) throws IOException {
File file = new File("F:\\dpcq.txt"); \\原文件,即要删除第5000到第10000行的文件
File file2 = new File("F:\\dpcqresult.txt"); \\新文件,临时名为dpcqresult.txt,执行完写入操作后会重名为旧原文件名,实现替代旧文件
BufferedReader reader = new BufferedReader(new FileReader(file));
PrintWriter writer = new PrintWriter(file2);
String line;
int lineNum=0;
while ((line = reader.readLine()) != null) {
lineNum++;
// 判断条件,根据自己的情况书写,会删除所有符合条件的行
if ( lineNum>=5000&&lineNum<=10000) {
// 读取后面的几行,废弃
// reader.readLine();
// reader.readLine();
// reader.readLine();
System.out.println("第"+lineNum+"行内容为:"+line+",跳过!");
continue;
}
writer.println(line);
writer.flush();
}
reader.close();
writer.close();
// 删除老文件
file.delete();
file2.renameTo(file);
}
}
public static void deleteLine(File file,Integer startLine,Integer endLine) throws IOException{
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
String line = null;
try {
bufferedReader = new BufferedReader(new FileReader(file));
bufferedWriter = new BufferedWriter(new FileWriter("D://aim.txt"));
Object[] objects = bufferedReader.lines().toArray();
if (objects.length < endLine || startLine >= endLine){
return;
}
for (int i = 0; (i < startLine-1 && objects[i] != null); i++) {
bufferedWriter.write(objects[i].toString());
bufferedWriter.newLine();
}
for (int i = endLine; (i < objects.length && objects[i] != null); i++) {
bufferedWriter.write(objects[i].toString());
bufferedWriter.newLine();
}
}finally {
bufferedWriter.close();
bufferedReader.close();
}
}
JAVA 代码