从一个非常长的文件写一个字符串到python中的另一个文件

时间:2017-03-01 04:53:43

标签: python

请不要因为我的菜鸟问题而斩首我。我已经在stackoverflow上查找了很多关于这个主题的其他问题,但是没有找到一个按预期工作的解决方案。

问题: 我有一个相当大的txt文件(大约5 MB),我想通过readlines()或字符串处理函数中的任何其他构建复制到一个新文件。对于较小的文件,以下代码确实有效(仅在此处进行了示意性编码):

f = open('C:/.../old.txt', 'r');
n = open('C:/.../new.txt', 'w');
for line in f:
    print(line, file=n);

但是,正如我在此处发现的那样(UnicodeDecodeError: 'charmap' codec can't encode character X at position Y: character maps to undefined),Windows的内部限制禁止此操作处理较大的文件。到目前为止,我提出的唯一解决方案如下:

f = open('C:/.../old.txt', 'r', encoding='utf8', errors='ignore');
n = open('C:/.../new.txt', 'a');
for line in f:
    print(line, file=sys.stderr) and append(line, file='C:/.../new.txt');   

f.close();
n.close();

但这不起作用。我得到一个new.txt文件,但它是空的。那么,如何遍历一个长txt文件并将每一行写入一个新的txt文件?有没有办法读取sys.stderr作为新文件的源(我实际上不知道,这是什么sys.stderr)? 我知道这是一个菜鸟问题,但我不知道在哪里寻找答案。

提前致谢!

4 个答案:

答案 0 :(得分:1)

不需要print()仅使用write()文件:

with open('C:/.../old.txt', 'r') as f, open('C:/.../new.txt', 'w') as n:
    n.writelines(f)

但是,听起来您可能遇到编码问题,因此请确保使用正确的编码打开这两个文件。如果您提供错误输出,则可能会提供更多帮助。

BTW:Python没有使用;作为行终止符,如果你想把它们放在同一行上,它可以用来分隔2个语句,但这通常被认为是不好的形式。

答案 1 :(得分:0)

您可以将标准输出设置为文件,就像我的代码一样。  我用这个成功复制了6MB的文本文件。

import sys

bigoutput = open("bigcopy.txt", "w")
sys.stdout = bigoutput
with open("big.txt", "r") as biginput:
    for bigline in biginput.readlines():
        print(bigline.replace("\n", ""))
bigoutput.close()

答案 2 :(得分:0)

为什么不直接使用shutil模块并复制文件?

答案 3 :(得分:0)

你可以尝试使用这个代码,它对我有用。

with open("file_path/../large_file.txt") as f:
    with open("file_path/../new_file", "wb") as new_f:
            new_f.writelines(f.readlines())
            new_f.close()
    f.close()