10

我在网上找到了大部分英文单词的列表,但换行符是 unix 风格的(以 Unicode 编码:UTF-8)。我在这个网站上找到了它:http: //dreamsteep.com/projects/the-english-open-word-list.html

如何将换行符转换为 CRLF,以便可以遍历它们?我将在其中使用它们的程序会遍历文件中的每一行,因此单词必须每行一个。

这是文件的一部分:bitbackbitebackbiterbackbitersbackbitesbackbitingbackbittenbackboard

它应该是:

bit
backbite
backbiter
backbiters
backbites
backbiting
backbitten
backboard

如何将我的文件转换为这种类型?注意:它是 26 个文件(每个字母一个),总共 80,000 个单词左右(所以程序应该非常快)。

我不知道从哪里开始,因为我从未使用过 unicode。提前致谢!

rU用作参数(如建议的那样),在我的代码中使用:

with open(my_file_name, 'rU') as my_file:
    for line in my_file:
        new_words.append(str(line))
my_file.close()

我收到此错误:

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    addWords('B Words')
  File "D:\my_stuff\Google Drive\documents\SCHOOL\Programming\Python\Programming Class\hangman.py", line 138, in addWords
    for line in my_file:
  File "C:\Python3.3\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 7488: character maps to <undefined>

谁能帮我这个?

4

4 回答 4

18

而不是转换,您应该能够使用 Python 的通用换行支持打开文件:

f = open('words.txt', 'rU')

(注意U.)

于 2012-12-19T14:53:16.380 回答
13

您可以使用字符串的替换方法。像

txt.replace('\n', '\r\n')

编辑:
在你的情况下:

with open('input.txt') as inp, open('output.txt', 'w') as out:
    txt = inp.read()
    txt = txt.replace('\n', '\r\n')
    out.write(txt)
于 2012-12-19T14:51:57.387 回答
2

您无需转换文件中的行尾即可对其进行迭代。正如 NPE 所建议的,只需使用python 的通用换行符模式

发生 UnicodeDecodeError 是因为您正在处理的文件被编码为 UTF-8 并且当您尝试将内容从字节解码为字符串时,通过str(line),Python 正在使用cp1252编码将从文件读取的字节转换为 Python 3 字符串(即一系列 unicode 代码点)。但是,这些文件中的某些字节无法使用cp1252编码解码并导致 UnicodeDecodeError。

如果您更改str(line)为,line.decode('utf-8')您应该不再收到 UnicodeDecodeError。查看文本与。数据而不是 Unicode Vs。8-bit writeup 了解更多细节。

最后,您可能还会发现Joel Spolsky的《每个软件开发人员绝对、肯定必须了解 Unicode 和字符集(没有借口!)的绝对最小值》很有用。

于 2012-12-19T22:30:49.727 回答
1

您可以使用 cereja 包

pip install cereja==1.2.0

import cereja cereja.lf_to_crlf(dir_or_file_path)

或者

cereja.lf_to_crlf(dir_or_file_path, ext_in=[“.py”,”.csv”])

您可以替换任何标准。查看文件工具模块

于 2020-03-13T04:19:16.917 回答