【发布时间】:2015-03-29 15:36:40
【问题描述】:
我有一个 40GB 文本文件,其中包含以下行:
55655653:foo
6654641:balh2
我编写了一个批处理脚本来查找和替换/删除 :foo 并且只保留之前的数字。
批处理脚本:
@echo on
((for /f "tokens=1 delims=:" %%b in (C:\data.txt) do ( echo %%b)) >C:\dataFinal.txt
)
pause
batch的问题是无法读取40GB的大文件
所以我决定编写 Python 代码来做同样的事情:
f1 = open('data.txt', 'r')
f2 = open('dataFinal.txt', 'w')
for line in f1:
f2.write(line.replace(':', ''))
f1.close()
f2.close()
我在这里缺少的是如何指定要删除的:之后的文本,对于批处理文件,它是 tokens=1 delims=:
请注意文件大小
我已经使用 Java 代码生成了 40GB 的文件(也许这些信息可以帮助我们):
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8"));
while (in.ready()) {
String line = in.readLine();
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.println(initializeKeyPair(line).toString() + ":" + line );
【问题讨论】:
-
你在谈论 Windows 吗?
-
如果您是通过 Java 代码创建的 - 为什么不重新运行它并删除
+ ": " + line? -
@Jon Clements 我需要两个文件副本,一个带有 Number:Text,另一个只有 Number,生成此文件大约需要 4 天。我刚刚意识到我可以添加另一个 PrintStream 以仅保存 initializeKeyPair(line).toString() (the Number) ,所以它会写入两个文件,但现在为时已晚。
标签: python windows batch-file