我在网上找到了大多数英文单词的列表,但换行符是unix-style(用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>
任何人都可以帮我吗?
答案 0 :(得分:12)
您可以使用字符串的替换方法。喜欢
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)
答案 1 :(得分:2)
您无需转换文件中的行结尾,以便能够迭代它们。正如NPE所建议的那样,只需使用python's universal newlines mode即可。
发生UnicodeDecode错误是因为您正在处理的文件被编码为UTF-8,当您尝试通过str(line)
将内容从字节解码为字符串时,Python正在使用cp1252
编码将从文件读取的字节转换为Python 3字符串(即一系列unicode代码点)。但是,这些文件中的字节无法使用cp1252
编码进行解码,并导致UnicodeDecodeError。
如果您将str(line)
更改为line.decode('utf-8')
,则不应再获取UnicodeDecodeError。查看Text Vs. Data Instead of Unicode Vs. 8-bit的说明以获取更多详细信息。
最后,您可能还会发现Joel Spolsky的The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)很有用。
答案 2 :(得分:0)
您可以使用cereja软件包
pip install cereja
import cereja
cereja.lf_to_crlf(dir_or_file_path)
或
cereja.lf_to_crlf(dir_or_file_path, ext_in=[“.py”,”.csv”])
您可以替代任何标准。参见filetools模块