简单的python/Regex问题:从文件中删除所有新行

Chr*_*ris 22 python regex

我正在熟悉python并且正在创建问题以帮助自己学习语言的细节.我的下一个问题如下:

我已经从互联网上复制并粘贴了大量文本,但复制和粘贴添加了几个新行来分解巨大的字符串.我希望以编程方式删除所有这些并将字符串返回到一大块字符中.这显然是正则表达式的一项工作(我认为),并且解析整个文件并删除换行符的所有实例听起来都会起作用,但对我来说似乎并没有那么好.

有一个简单的方法来解决这个问题吗?看起来很简单.

Ale*_*lli 36

两个主要选择:将所有内容作为单个字符串读取并删除换行符:

clean = open('thefile.txt').read().replace('\n', '')
Run Code Online (Sandbox Code Playgroud)

或者,逐行读取,删除结束每一行的换行符,然后重新连接:

clean = ''.join(l[:-1] for l in open('thefile.txt'))
Run Code Online (Sandbox Code Playgroud)

前一种选择可能更快,但是,一如既往,我强烈建议您python -mtimeit在特定兴趣的情况下测量速度(例如,使用),而不是仅仅假设您知道性能如何.RE可能更慢,但是,再次:不要猜测,测量!

所以这里有一些笔记本电脑上特定文本文件的数字:

$ python -mtimeit -s"import re" "re.sub('\n','',open('AV1611Bible.txt').read())"
10 loops, best of 3: 53.9 msec per loop
$ python -mtimeit "''.join(l[:-1] for l in open('AV1611Bible.txt'))"
10 loops, best of 3: 51.3 msec per loop
$ python -mtimeit "open('AV1611Bible.txt').read().replace('\n', '')"
10 loops, best of 3: 35.1 msec per loop
Run Code Online (Sandbox Code Playgroud)

该文件是KJ圣经的一个版本,从此处下载并解压缩(我认为在一个容易获取的文件上运行此类测量非常重要,因此其他人可以轻松地重现它们!).

当然,对于4.3 MB,34,000行的文件,或多或少几毫秒,对你来说可能并不重要; 但是最快的方法也是最简单的方法(远非异常情况,特别是在Python中;-),我认为这是一个非常好的建议.


Ric*_*dle 10

我不会使用正则表达式来简单地替换换行符 - 我会使用string.replace().这是一个完整的脚本:

f = open('input.txt')
contents = f.read()
f.close()
new_contents = contents.replace('\n', '')
f = open('output.txt', 'w')
f.write(new_contents)
f.close()
Run Code Online (Sandbox Code Playgroud)