首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >写入.txt文件(UTF-8),python

写入.txt文件(UTF-8),python
EN

Stack Overflow用户
提问于 2010-11-06 19:24:58
回答 3查看 39K关注 0票数 10

我想将输出(contents)保存到一个文件(以UTF8格式保存)。这个文件不应该被覆盖,它应该被保存为一个新的文件--例如file2.txt。所以,我用拳头打开一个file.txt,用UTF8编码,做一些事情,然后用UTF8把它保存到file2.txt。我该怎么做呢?

代码语言:javascript
复制
import codecs
def openfile(filename):
    with codecs.open(filename, encoding="UTF-8") as F:
        contents = F.read()
        ...
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-06 19:26:33

捷径:

代码语言:javascript
复制
file('file2.txt','w').write( file('file.txt').read().encode('utf-8') )

漫漫长路:

代码语言:javascript
复制
data = file('file.txt').read()
... process data ...
data = data.encode('utf-8')
file('file2.txt','w').write( data )

并显式地使用“codecs”:

代码语言:javascript
复制
codecs.getwriter('utf-8')(file('/tmp/bla3','w')).write(data)
票数 16
EN

Stack Overflow用户

发布于 2010-11-06 20:54:27

我喜欢在这样的情况下分离关注点-我认为这真的使代码更干净,更容易维护,并且可以更有效。

这里有3个问题:读取UTF-8文件、处理行和编写UTF-8文件。假设您的处理是基于行的,这在Python中可以很好地工作,因为打开和迭代文件的行是该语言内置的。除了更清晰,这也是更有效的,因为它允许您处理不适合内存的大型文件。最后,它为你提供了一种很好的方法来测试你的代码--因为处理是从文件io中分离出来的,它允许你编写单元测试,甚至只是在示例文本上运行处理代码,并手动检查输出,而不需要摆弄文件。

出于示例的目的,我将行转换为大写--想必您的处理会更有趣。我喜欢在这里使用like它使处理过程更容易删除或插入额外的行,尽管在我的简单示例中并没有使用它。

代码语言:javascript
复制
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)
票数 10
EN

Stack Overflow用户

发布于 2010-11-06 19:27:58

打开第二个文件。如果需要,请使用contextlib.nested()。使用shutil.copyfileobj()复制内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4112894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档