我想将输出(contents)保存到一个文件(以UTF8格式保存)。这个文件不应该被覆盖,它应该被保存为一个新的文件--例如file2.txt。所以,我用拳头打开一个file.txt,用UTF8编码,做一些事情,然后用UTF8把它保存到file2.txt。我该怎么做呢?
import codecs
def openfile(filename):
with codecs.open(filename, encoding="UTF-8") as F:
contents = F.read()
...发布于 2010-11-06 19:26:33
捷径:
file('file2.txt','w').write( file('file.txt').read().encode('utf-8') )漫漫长路:
data = file('file.txt').read()
... process data ...
data = data.encode('utf-8')
file('file2.txt','w').write( data )并显式地使用“codecs”:
codecs.getwriter('utf-8')(file('/tmp/bla3','w')).write(data)发布于 2010-11-06 20:54:27
我喜欢在这样的情况下分离关注点-我认为这真的使代码更干净,更容易维护,并且可以更有效。
这里有3个问题:读取UTF-8文件、处理行和编写UTF-8文件。假设您的处理是基于行的,这在Python中可以很好地工作,因为打开和迭代文件的行是该语言内置的。除了更清晰,这也是更有效的,因为它允许您处理不适合内存的大型文件。最后,它为你提供了一种很好的方法来测试你的代码--因为处理是从文件io中分离出来的,它允许你编写单元测试,甚至只是在示例文本上运行处理代码,并手动检查输出,而不需要摆弄文件。
出于示例的目的,我将行转换为大写--想必您的处理会更有趣。我喜欢在这里使用like它使处理过程更容易删除或插入额外的行,尽管在我的简单示例中并没有使用它。
def process(lines):
for line in lines:
yield line.upper()
with codecs.open(file1, 'r', 'utf-8') as infile:
with codecs.open(file2, 'w', 'utf-8') as outfile:
for line in process(infile):
outfile.write(line)发布于 2010-11-06 19:27:58
打开第二个文件。如果需要,请使用contextlib.nested()。使用shutil.copyfileobj()复制内容。
https://stackoverflow.com/questions/4112894
复制相似问题