无法用Python编写人类可读的文字

时间:2014-06-02 09:13:44

标签: python python-3.x file-io encoding

我正在尝试构建出现在指定目录中的文件中的所有单词的列表,然后将此列表保存到文件中。当我尝试打印任何列表的位置时,它似乎没问题(它是人类可读的),但在我将其写入文件后,我只看到字节数。这是我的代码:

import os

directoryList = ['/Users/Kuba/Desktop/Articles/1', '/Users/Kuba/Desktop/Articles/2', '/Users/Kuba/Desktop/Articles/4']
bigBagOfWords = []

for directory in directoryList:
    for filename in os.listdir(directory):
        filename = os.path.join(directory, filename)
        currentFile = open(filename, 'rt', encoding = 'latin-1')
        for line in currentFile:
            currentLine = line.split(' ')
            for word in currentLine:
                if word.lower() not in bigBagOfWords:
                    bigBagOfWords.append(word.lower())
        currentFile.close()

saveFile = open('dictionary.txt', 'wt', encoding = 'latin-1')
for word in bigBagOfWords:
    saveFile.write(word)
    saveFile.write('\n')
saveFile.close()

File" dictionary.txt"包含如下所示的行:

  <00> 0000 0007 0078 0064   006b 002e 0074 0078 0074 696c 6f63 626c 6f62 0000 0010 0000 00ec   0000 09e8 ffff ffff ffff 0000 0000

如何强制python以人类可读的编码方式编写这些单词?我在这里做了哪些重大错误吗?

1 个答案:

答案 0 :(得分:1)

您已打开.DS_Store OS X desktop information file并将其添加到输出文件中。当您在Sublime Text中打开文件时,文本编辑器会以圆柱形十六进制转储格式显示二进制文件。

字符序列locblob是专有格式的特征。您还向我们展示的十六进制转储中隐藏了UTF-16中的文本xdk.txt; .DS_Store文件存储非本机OS X文件系统上的文件的图标位置和其他属性。

在循环目录时过滤掉这些文件。通常,您希望忽略以.开头的文件:

for filename in os.listdir(directory):
    if filename[0] == '.':
        continue  # skip hidden files
    filename = os.path.join(directory, filename)