繁体   English   中英

如何使用Python将中文txt文件中的每两行相邻行合并为一行

[英]How to combine every two adjoining lines in Chinese txt file into one line with Python

我有一个中文txt文件,其中包含数千行句子,如下所示:

  1. 1行
  2. 2号线
  3. 3号线
  4. 4号线

…………

我想将每两个相邻的行合并为一行,应将其转换为:

  1. 第1行+空格+第2行
  2. 第3行+空格+第4行
  3. 第5行+空格+第6行…………

如何使用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为每行执行给定脚本时,换行符不包含在模式空间中(将其包括在内是多余的)。 所以执行的顺序是:

  • sed在模式空间中加载一条线
  • N :将下一行追加到模式空间,现在我们在模式空间中有两行,它们必须用换行符分隔,因此我们在模式空间的中间有一个换行符
  • s/\\n/ /用空格替换换行符
  • sed现在打印该行,因为此行无事可做
  • 然后从下一行开始
  1. 您将读取文件并获得行列表(即字符串列表)
  2. 那么您可以使用列表推导,如下所示:

    [ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM