请不要因为我的菜鸟问题而斩首我。我已经在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)? 我知道这是一个菜鸟问题,但我不知道在哪里寻找答案。
提前致谢!
答案 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()