[英]How to combine every two adjoining lines in Chinese txt file into one line with Python
我有一个中文txt文件,其中包含数千行句子,如下所示:
…………
我想将每两个相邻的行合并为一行,应将其转换为:
如何使用Python完成组合?
您不需要Python, sed
就足够了:
$ seq 15 > lines
$ cat lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ sed 'N;s/\n/ /g' lines
1 2
3 4
5 6
7 8
9 10
11 12
13 14
15
据曼·塞德说:
n N将下一行输入读/追加到模式空间。
和
s / regexp / replacement /
尝试将正则表达式与模式空间进行匹配。 如果成功,则替换与替换匹配的那部分。 替换可能包含特殊字符&来表示匹配的模式空间部分,特殊转义\\ 1到\\ 9表示正则表达式中的相应匹配子表达式。
并且,当sed
为每行执行给定脚本时,换行符不包含在模式空间中(将其包括在内是多余的)。 所以执行的顺序是:
N
:将下一行追加到模式空间,现在我们在模式空间中有两行,它们必须用换行符分隔,因此我们在模式空间的中间有一个换行符 s/\\n/ /
用空格替换换行符 那么您可以使用列表推导,如下所示:
[ l1 + ' ' + l2 for l1,l2 in zip(lines[::2], lines[1::2]) ]
注意,这意味着您必须有相等数量的行。 因此,如果len(lines)%2==1
则使用lines[-1]
单独打印/使用最后一行
您应该像下面这样迭代文件:
with open('./chinese.txt') as my_file:
for line in my_file:
try:
print '{} {}'.format(line.strip(), my_file.next())
except StopIteration: # Manage case: number of lines is an odd number
print line
文件是Python中各行的迭代器。 您可以使用itertools的grouper()配方将各行分成几对 :
#!/usr/bin/env python2
from itertools import izip_longest
with open('Chinese.txt') as file:
for line, another in izip_longest(file, file, fillvalue=''):
print line.rstrip('\n'), another,
print
语句末尾的逗号是file.softspace
hack,以避免重复行 。
该代码在内存中仅保留两行,因此可以支持任意大文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.