简单正则表达式问题:从文件中删除所有换行符

24 投票
6 回答
76140 浏览
提问于 2025-04-15 13:28

我正在学习Python,想通过自己出题来帮助自己掌握这门语言。接下来我遇到的问题是:

我从网上复制了一大堆文字,但复制粘贴的时候,文本中多了很多换行符,把这段大字符串分开了。我想要通过编程的方式把这些换行符都去掉,把它变成一大块连续的字符。显然,这个任务可以用正则表达式来解决(我觉得),通过遍历文件并去掉所有的换行符应该可以做到,但我试了之后似乎效果不太好。

有没有简单的方法可以做到这一点?看起来应该挺简单的。

6 个回答

4

当然可以!请看下面的内容:

在编程中,有时候我们需要处理一些数据,这些数据可能来自不同的地方,比如用户输入、文件或者网络请求。为了让程序能够理解这些数据,我们通常会把它们转换成一种特定的格式。这个过程就叫做“解析”。

解析的过程就像是把一堆杂乱无章的东西整理成一个有序的列表。比如说,如果你有一份购物清单,上面写着“苹果、香蕉、橙子”,你可能会想把它们分开,变成一个数组,方便你逐个查看和处理。

在编程中,解析的方式有很多种,具体取决于你要处理的数据类型和格式。常见的格式有JSON、XML等。每种格式都有自己的规则,就像语言一样,必须按照这些规则来才能正确理解数据。

总之,解析就是把复杂的数据变得简单易懂的过程,让程序能够更好地使用这些数据。

import re
re.sub(r"\n", "", file_contents_here)
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()
37

有两种主要的方法:把所有内容当作一个整体读进来,然后去掉换行符:

clean = open('thefile.txt').read().replace('\n', '')

或者,逐行读取,每行末尾的换行符去掉,然后再把它们拼接起来:

clean = ''.join(l[:-1] for l in open('thefile.txt'))

第一种方法可能会更快,但我还是强烈建议你去测量一下速度(比如用 python -mtimeit),而不是单纯地猜测性能会怎样。正则表达式可能会慢一些,但同样的,不要猜,去测量一下吧!

下面是我在笔记本电脑上对一个特定文本文件的一些数据:

$ 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

这个文件是KJ圣经的一个版本,从 这里 下载并解压的(我觉得在一个容易获取的文件上进行这样的测量很重要,这样其他人也能轻松复现这些结果!)。

当然,对于一个4.3 MB、34,000行的文件来说,多几毫秒或少几毫秒可能对你来说没什么大不了的;但是最快的方法往往也是最简单的方法(这在Python中并不少见;-),所以我觉得这是个不错的建议。

撰写回答