使用re.split在Python中将文件分割成行
我正在尝试用列表推导式来分割一个文件,代码大概是这样的:
lines = [x for x in re.split(r"\n+", file.read()) if not re.match(r"com", x)]
但是,生成的行列表最后总是会有一个空字符串。有没有人知道怎么能避免这个问题(除了在后面加个 pop())?
4 个回答
1
另一个很实用的小技巧,特别是当你需要行号的时候,就是使用enumerate:
fp = open("myfile.txt", "r")
for n, line in enumerate(fp.readlines()):
dosomethingwith(n, line)
我最近才知道enumerate这个东西,但从那以后它帮了我不少忙。
3
lines = file.readlines()
补充:如果你不想要空行,可以这样写:
lines = filter(lambda a:(a!='\n'), file.readlines())
补充2:如果你想去掉每行末尾的换行符,可以这样做:
lines = [re.sub('\n','',line) for line in filter(lambda a:(a!='\n'), file.readlines())]
9
把正则表达式放一边吧 :-)
- 你可以直接遍历文件;现在几乎不需要用
readlines()
了。 - 了解一下
str.strip()
(还有它的好朋友lstrip()
和rstrip()
)。 - 不要把
file
当作变量名。这是不好的做法,因为file
是一个 内置函数。
你可以这样写你的代码:
lines = []
f = open(filename)
for line in f:
if not line.startswith('com'):
lines.append(line.strip())
如果你还是遇到空行,可以加个测试:
lines = []
f = open(filename)
for line in f:
if line.strip() and not line.startswith('com'):
lines.append(line.strip())
如果你真的想把它写成一行:
lines = [line.strip() for line in open(filename) if line.strip() and not line.startswith('com')]
最后,如果你用的是 Python 2.6,可以看看 with 语句,这样可以让事情更简单一些。