我有一个40GB的文本文件,包含以下行:
55655653:FO
6654641:balh2
我已经编写了一个批处理脚本来查找和替换/删除:foo,并且只保留之前的数字。
批处理脚本:

 @echo on

 ((for /f "tokens=1 delims=:" %%b in (C:\data.txt) do ( echo %%b)) >C:\dataFinal.txt
 )
pause

批处理的问题是它无法读取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 );

最佳答案

您可以使用str.partition在第一个:

with open('data.txt') as fin, open('dataFinal.txt', 'w') as fout:
    fout.writelines(line.partition(':')[0] + '\n' for line in fin)

不是我们在这里使用的是with,所以文件会自动关闭,一个生成器表达式循环fin,分割行,取到第一个:,然后用新行将其写回fout。
您可能希望指定编码:
import io

with io.open('/usr/share/dict/words', encoding='utf-8') as fin, io.open('dataFinal.txt', 'w', encoding='utf-8') as fout:
    fout.writelines(line.partition(':')[0] + '\n' for line in fin)

关于python - 如何在指定的delims之后使用Python查找和替换/删除文本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28231175/

10-15 00:07
查看更多