如何通过python将中文字符写入文件

时间:2016-02-29 15:20:45

标签: python

我在目录中漫步并希望将所有文件名写入文件。这是代码片段

with open("c:/Users/me/filename.txt", "a") as d:
   for dir, subdirs, files in os.walk("c:/temp"):
      for f in files:
         fname = os.path.join(dir, f)
         print fname
         d.write(fname + "\n")
d.close()

我遇到的问题是,有些文件以中文字符命名。通过使用print,我可以在控制台中正确地看到文件名,但在目标文件中,它只是一团糟...我试图像{{1}一样打开文件但是它不起作用。我也尝试写open(u"c:/Users/me/filename.txt", "a"),但仍然无效...

4 个答案:

答案 0 :(得分:3)

在Python 2中,如果你正在处理ASCII以外的编码,那么使用codecs.open()是一个好主意。这样,您就不需要手动编码您编写的所有内容。此外,如果您希望文件名中包含非ASCII字符,则应将os.walk()传递给Unicode字符串:

import codecs
with codecs.open("c:/Users/me/filename.txt", "a", encoding="utf-8") as d:
   for dir, subdirs, files in os.walk(u"c:/temp"):
      for f in files:
         fname = os.path.join(dir, f)
         print fname
         d.write(fname + "\n")

无需致电d.close()with区块已经处理过此问题。

答案 1 :(得分:1)

使用str.encode()fname进行编码,然后再将其写入文件:

d.write(fname.encode('utf8') + '\n')

答案 2 :(得分:1)

要在python 2中成功编写汉字,您必须执行以下操作。

  1. 使用编解码器库打开文件,该库允许您提供 编码参数并将其设置为unicode。
  2. 将字符串写入 unicode编码。

更正的代码如下:

import codecs

with codecs.open("c:/Users/me/filename.txt", "a", encoding='utf-8') as d:
    for dir, subdirs, files in os.walk("c:/temp"):
        for f in files:
            fname = os.path.join(dir, f)
            print fname
            d.write(fname.decode('utf-8') + "\n")

注意

在python 3中不存在相同的问题,因此您还应该考虑使脚本与python 3兼容。

答案 3 :(得分:0)

关键是告诉python 准备该文件是否用于" utf-8"格式。我想知道为什么python默认不假设 utf-8 。无论如何,请尝试以下方法:

with open("c:/Users/me/filename.txt", "a", encoding='utf-8') as d:
    for dir, subdirs, files in os.walk("c:/temp"):
        ...

我正在使用python3.5。所以,请注意"编码" python 2.7中可能没有选项。但是这个想法是提前告诉python有关编码的信息,而不是稍后与每个字符串的编码作斗争。