我逐渐熟悉了python,并且为了帮助自己学习这门语言的细节而制造了一些问题。我的下一个问题如下:
我从互联网上复制和粘贴了大量的文本,但复制和粘贴添加了几行新行来拆分这个巨大的字符串。我希望通过编程删除所有这些,并将字符串返回到一个巨大的字符斑点中。这显然是regex的工作(我认为),解析文件并删除换行符的所有实例听起来似乎是可行的,但对我来说似乎并不是那么顺利。
有没有一种简单的方法来解决这个问题?这看起来很简单。
发布于 2009-08-08 19:54:29
两种主要的替代方法是:将所有内容作为单个字符串读取,并删除换行符:
clean = open('thefile.txt').read().replace('\n', '')
或者,逐行阅读,删除每行末尾的换行符,然后再次将其连接起来:
clean = ''.join(l[:-1] for l in open('thefile.txt'))
前一种方法可能更快,但一如既往,我强烈建议你在你感兴趣的情况下测量速度(例如,使用python -mtimeit
),而不是仅仅假设你知道性能如何。REs可能更慢,但是,再说一次:不要猜测,测量!
下面是我笔记本电脑上特定文本文件的一些数字:
$ 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圣经的一个版本,从here下载并解压缩(我确实认为在一个容易获取的文件上运行这种测量很重要,这样其他人就可以很容易地复制它们!)。
当然,在一个4.3MB、34000行的文件上,多几毫秒或少几毫秒可能对您没有多大影响;但由于最快的方法也是最简单的方法(远非罕见,特别是在Python中;-),我认为这是一个很好的建议。
发布于 2009-08-08 19:33:15
我不会使用正则表达式来简单地替换换行符-我会使用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()
发布于 2009-08-08 19:21:59
import re
re.sub(r"\n", "", file_contents_here)
https://stackoverflow.com/questions/1249670
复制相似问题