如何将LF转换为CRLF?

时间:2012-12-19 14:47:26

标签: python unix

我在网上找到了大多数英文单词的列表,但换行符是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>

任何人都可以帮我吗?

3 个答案:

答案 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模块