拆分文本文件

小初seo 软件工具363字数 1528阅读5分5秒阅读模式
摘要

文本文件的拆分要考虑文件编码,不然会出现乱码。

当文本文件过大时,我们有时需要将文件拆小后处理。

当我们有 linux shell 环境时可以使用 linux 环境自带的小工具来拆分文件。

首先我们可以使用 sed 拆分文本文件,sed 在 Windows 版的 git-bash 中也可以使用。我们使用 sed 的范围打印功能,比如以下例子打印文件的1至5000行。

$ wc -l ip.merge.txt683591 ip.merge.txt
$ sed -n '1,5000p' ip.merge.txt > 1_5000.txt
$ wc -l 1_5000.txt5000 1_5000.txt

使用 sed 我们可以随意指定打印范围,非常灵活。

第二种方法是使用 split 工具,这款工具在 Windows 版的 git-bash 中也包含了,可以正常使用。

$ split -n 3 -d -a 3 ip.merge.txt index.part$ wc -l index.part00*  222599 index.part000  228897 index.part001  232095 index.part002  683591 total

以上命令通过 -n 3 将文件拆成3份,-a 3 是后缀长度为3,-d 是以数字作为后缀。除了可以按份来拆分,也可以按行数进行拆分。

$ split -l 200000 -d -a 3 ip.merge.txt index.part$ wc -l index.part00*  200000 index.part000  200000 index.part001  200000 index.part002   83591 index.part003  683591 total

如果没有linux环境,我们还可以使用Python编写脚本来搞定。脚本使用方法与 sed 类似,指定行的范围:

$ python ./split.py 100-200 ip.merge.txt
# 或者使用管道的方式$ cat ip.merge.txt | python ./split.py 101-200
# 脚本使用 utf-8 编码读写文件# 如果是在Windows下执行,标准输出的编码不为 utf-8 # 在 git-bash 下使用管道,需要按如下配置,不然会乱码$ export PYTHONIOENCODING=utf-8$ cat ip.merge.txt | python ./split.py 101-200

脚本 split.py 内容如下:

#!python3
import sys
f = sys.stdinline_range = []

if len(sys.argv) == 3:    line_range = sys.argv[1].split('-')    f = open(sys.argv[2], 'r', encoding='utf-8')elif len(sys.argv) == 2:    line_range = sys.argv[1].split('-')else:    print("Usage:n    python3 ./split.py 1-50 demo.txt")    sys.exit()
n = 1begin, end = [int(x) for x in line_range]
if begin > end or begin < 1:    print("Error: wrong range!")    print("t", sys.argv[1])    sys.exit(-1)
line = f.readline()while line:    if n == begin:        print(line, end='')        n += 1        line = f.readline()        while line:            if n <= end:                print(line, end='')                n += 1            line = f.readline()            if n > end:                f.close()                sys.exit()    else:        n += 1        line = f.readline()        f.close()

全文完。

  • 本文由 发表于 2022年12月31日 20:17:39
  • 转载请务必保留本文链接:https://www.pkak.cn/9072.html