资讯动态

合并txt文件的几种实用方法:CMD、cat与Python脚本详解

发布时间:2026/10/14 11:05:35 来源:尧图企业网站定制
合并txt文件的几个方法先说个场景项目日志攒了一堆按日期拆分的txt文件或从某处导出的数据被系统拆成了好几份再或者网文爱好者下载了一部小说的分卷txt想合并成一个文件。很多人第一反应是打开一个个文件、全选、复制、粘贴到新文件里。文件少还好要是几十个几百个这么干能把自己累到怀疑人生。我前阵子接手一个数据处理任务同事交给我128个txt片段每个几MB级别说“手动合并一下就行”。我当时就明确告诉他想多了。手动打开128个大文件再逐一复制粘贴一来巨慢二来在文本编辑器里根本撑不住这种体量。最后我用脚本加命令行配合一分钟不到就把这事办完了。这篇文章我打算把合并txt文件的常用思路和实操代码完整梳理一遍覆盖Windows、macOS/Linux、Python脚本、编辑器操作等五种以上的方案把每个方案适合什么场景、有什么坑说清楚。看完你至少能解决90%的合并需求。特别是需要批量处理大量文件、或者想保证文件合并顺序不乱的场景这篇能省你不少时间。1. 合并txt文件的几种方案与选型逻辑1.1 为什么一个“复制粘贴”能完成的事还需要专门研究很多人觉得合并txt文件很简单但实际操作中会遇到几个隐藏问题。文件数量多到你记不清顺序、几个G的大文件双击都卡死、编码不一致导致乱码、文件间没有换行导致内容首尾粘连——这些在手动操作时几乎无解。我收到过不止一次求助说“合并之后内容全是一团乱码”或者“合并完中间漏了几行”都是没用对方案导致的结果。1.2 方案的五大分类从命令到脚本再到工具我按照“是否需要安装软件”和“能否自动化”这两个维度把主流方案分成了五类。第一类是Windows系统自带的CMD命令用type或copy直接把文件拼起来零成本无依赖。第二类是macOS和Linux上的cat命令思路类似参数更丰富支持通配符一把梭。第三类是PowerShell脚本适合需要精细控制编码和顺序的场景。第四类是Python脚本灵活度最高能处理编码转换、文件名排序、递归子目录过滤这些复杂需求。第五类是文本编辑器和在线工具适合图形化操作、偶尔合并几个文件的轻度用户。1.3 按照场景反推方案而不是先选工具我的建议是先看文件数量再看文件大小最后看要不要重复执行。场景特征推荐方案理由几个文件、一次性操作、系统是Windows记事本 手动或者CMD的type命令没必要为一次性需求搭环境几十上百个文件、需要按文件名排序合并Python脚本 自然排序顺序可控能解决数字文件名的坑文件体积单个超过500MBPython分块读取或者Linux cat普通编辑器直接内存爆掉合并后编码必须是UTF-8源文件是GBKPython编码转换脚本编码问题只有脚本能精准控制临时合并、不想装任何东西CMD的type命令 或 在线合并工具零安装用完即走需要定期合并、重复执行写成脚本保存复用一次调试永久生效这个表我用了很多年基本能把需求快速归类。下面我按类别把每个方案的实操细节展开讲。2. 命令行方案Windows和Linux系统的“原生暴力操作”2.1 Windows CMD合并type命令与copy命令的玩法Windows用户不用装任何东西直接打开CMD就能合并。最核心的命令是type它的作用是把一个或多个文本文件的内容输出到屏幕配合重定向符就能写入新文件。type a.txt b.txt c.txt merged.txt这条命令会把a、b、c三个文件按顺序合并到merged.txt里。注意屏幕上不会有任何输出因为内容全被重定向到文件里了。如果文件多用通配符更省事type *.txt merged.txt这条命令会把当前目录下所有txt文件按文件名的字典序合并。注意这里是字典序不是数字序。当你有一堆“1.txt、2.txt、10.txt、11.txt”这种文件时字典序的排列是1、10、11、2结果就是文件顺序全乱。这个细节后面我会专题讲。除了typecopy命令也能干这活。官方文档里对copy的描述是复制文件但它的/txt模式支持拼接多个文本文件。copy /a *.txt merged.txt执行后CMD会提示“已复制 1 个文件”实际上是把所有匹配的txt文本拼接后复制到目标文件。有人问为什么不用copy直接写copy /b那是因为/b表示二进制模式用于拼接非文本文件比如图片合并txt用文本模式/a更合适。注意无论type还是copy执行前一定要确认当前目录下没有merged.txt这个文件。如果目标文件已存在部分版本会直接覆盖有些会提示是否覆盖。为了避免意外建议先进入一个干净的空目录操作或者使用不同的输出文件名。2.2 macos/Linux cat命令一条命令合并所有文件在macOS或Linux终端里cat命令是最经典的文本查看和拼接工具。合并用法非常简单甚至比Windows的type更符合直觉cat a.txt b.txt c.txt merged.txt如果文件在子目录里或者文件名有规律cat part1.txt part2.txt part3.txt full.txt cat log_*.txt all_log.txtcat命令还有个优势是支持分页查看参数比如-n给合并后的每行加行号-s压缩连续空行。做数据预处理时我经常这么干cat -n part1.txt part2.txt numbered.txt注意cat的显示重定向符号和追加符号的区别。如果你反复执行cat *.txt merged.txt每次都会先清空merged.txt再写入如果写成了cat *.txt merged.txt则是追加重复执行会导致内容翻倍堆积。这个低级错误我见过太多次了。2.3 命令行方案的优势和边界命令行合并的最大优势是快、无依赖、不出错。对于文本内容命令行拼接是逐字节处理的几乎不消耗内存几百MB的文件也能轻松搞定不用担心文本编辑器卡死。但边界也很明显。首先是编码问题Windows的type和Linux的cat都不做编码转换。如果源文件是GBK编码合并后还是GBK如果混用了UTF-8和GBK合并出来的文件就是乱码。其次多个文件之间不会自动插入换行假设a.txt最后一行没有换行符、b.txt开头也没有拼完两段内容就粘在一起了。这两个问题只能靠脚本方案解决。3. Python脚本合并灵活处理编码、顺序和大文件3.1 最基础的实现循环读取与写入如果文件数量不大、没有排序需求Python写个最简单版本就够了import glob files glob.glob(*.txt) with open(merged.txt, w, encodingutf-8) as out: for f in files: with open(f, r, encodingutf-8) as infile: out.write(infile.read())这段代码的逻辑很好懂用glob找到当前目录下所有txt文件逐个打开读取全部内容再写入merged.txt。我见过很多初学者这样写功能没问题但有一个隐患infile.read()会一次性把整个文件读入内存。如果某个文件有2GB这行代码直接吃满内存甚至触发MemoryError。3.2 处理大文件分块读取稳如老狗合并大文件时务必要用分块读取的方式每次只读一小段比如64KB或1MB用完即丢。import glob CHUNK_SIZE 1024 * 1024 # 1MB with open(merged.txt, w, encodingutf-8) as out: for f in glob.glob(*.txt): with open(f, r, encodingutf-8) as infile: while True: chunk infile.read(CHUNK_SIZE) if not chunk: break out.write(chunk)这个写法可以处理任意大小的文件内存占用恒定在1MB左右。我实测合并几十GB的文本时这个脚本跑得非常稳不会像编辑器那样页面卡死。核心原理就是流式处理读一段写一段不让整个内容同时驻留内存。3.3 解决编码问题的完整方案自动检测与智能转码编码问题是txt合并中最大的坑。Windows记事本默认用ANSI也就是GBK保存文件而Python默认字符编码是UTF-8。如果源文件是GBK你直接以UTF-8方式读取会直接抛出UnicodeDecodeError。我常用的方案是先自动检测每个文件的编码再统一转成目标编码输出。核心工具是chardet库它通过分析字节分布猜测编码类型。import glob import chardet def detect_encoding(file_path): with open(file_path, rb) as f: raw f.readline(10000) # 读前10KB做样本 result chardet.detect(raw) return result[encoding] or utf-8 files glob.glob(*.txt) with open(merged_utf8.txt, w, encodingutf-8) as out: for f in files: enc detect_encoding(f) with open(f, r, encodingenc) as infile: out.write(infile.read())这个脚本看起来简单但解决了一个非常现实的问题你根本不需要知道每个txt是什么编码脚本自动判断最后统一输出成UTF-8。注意编码检测不是100%准确样本太短可能识别错误所以我至少读前10KB。3.4 控制合并顺序自然排序解决1、10、2的问题Windows或Linux命令行用的都是字典序排序对数字排序完全不友好。我自己整理文件时经常遇到文件名为1.txt、2.txt、10.txt、11.txt的情况字典序处理后顺序变成1、10、11、2、20完全乱套。解决办法是自然排序也就是把字符串中的数字部分转成整数参与比较。Python实现如下import glob import re def natural_key(filename): parts re.split(r(\d), filename) return [int(part) if part.isdigit() else part for part in parts] files sorted(glob.glob(*.txt), keynatural_key)先用正则把文件名拆成“字母段数字段”的交替列表再把数字段转int。这样1.txt排到第1位2.txt排第2位10.txt排第10位顺序就对了。整个文件合并脚本组合起来就是这样import glob import re import chardet def natural_key(filename): parts re.split(r(\d), filename) return [int(part) if part.isdigit() else part for part in parts] def detect_encoding(file_path): with open(file_path, rb) as f: raw f.read(10000) return chardet.detect(raw)[encoding] or utf-8 files sorted(glob.glob(*.txt), keynatural_key) with open(merged.txt, w, encodingutf-8) as out: for f in files: enc detect_encoding(f) print(f正在处理: {f}, 编码: {enc}) with open(f, r, encodingenc) as infile: out.write(infile.read())这个版本我个人比较推荐既能自动检测编码又能保证数字文件名排序正确还有进度提示。把它存成merge.py以后改个路径就能反复用。3.5 进阶需求文件间补换行和按需过滤前面提到如果前一个文件结尾没有换行符合并后内容会粘连。解决办法是在写每个文件时主动补一个换行除非这个文件本身就是空文件或者已经以换行结束。for f in files: enc detect_encoding(f) with open(f, r, encodingenc) as infile: content infile.read() out.write(content) if not content.endswith(\n) and not content.endswith(\r\n): out.write(\n)还有场景是只需要合并满足条件的文件比如文件名包含特定关键词或者排除temp前缀。加一行过滤条件files [f for f in files if temp not in f and f.endswith(.txt)]这些细节看起来小但决定了合并结果是否需要二次修复。我从一开始就在脚本里把这些考虑进去后面基本不用返工。4. 编辑器与在线工具图形化轻量合并4.1 VS Code合并txt适合少文件的图形化操作如果你的工作流主要在VS Code里合并txt其实有很顺手的操作方式。打开多个txt标签页然后新建一个空白文件依次在每个源文件里全选复制粘贴过来即可。这个操作适合合并三五个文件量大了效率太低。还有个思路是利用VS Code的命令面板。打开目标文件后依次打开待合并的文件使用“追加文件内容”之类的扩展。不过这类扩展良莠不齐我不太推荐为了合并几个txt专门装一个扩展。VS Code处理大文件性能也有限超过50MB就会明显卡顿体验很差。4.2 Notepad批量合并老牌编辑器的独门秘技Windows老用户应该熟悉Notepad它本身没有内置合并功能但有一个经典插件叫Combine图形化界面下可以方便地合并多个文件。安装插件后在插件菜单里选择Combine然后把要合并的文件按顺序拖进列表点确定就合并了。好处是可见即所得你一眼能看出文件的排列顺序坏处是插件对高版本Notepad兼容性不稳定我也遇到过合并大文件时程序无响应的情况。4.3 在线工具的适用场景与安全隐患在线合并工具基本就是网页上传多个txt文件点击合并然后下载。这类工具适合零散的小文件比如几个K或者几十K的配置、小说章节。我有两条提醒不要上传敏感数据不要用在线工具处理超过几十MB的文件。很多免费在线工具为了节省服务器资源文件大小限制很严格合并过程也可能在浏览器端完成手机或电脑配置差一点的直接卡死。4.4 简化版方案FatFS之类的小工具还有一些第三方小工具比如FatFS、TxtCombine这类名字听起来就功能单一的软件本质就是图形化的文件拼接器。它们的共性是操作简单、小文件无压力但对大文件和编码的支持千差万别。如果你要处理GB级别的大文件我仍然建议回到命令行或Python脚本靠图形工具容易中途崩溃且没有任何提示。5. 常见问题与排查技巧实录5.1 合并后的txt乱码编码不统一导致的问题乱码是合并txt最常见的问题没有之一。表现是合并结果里部分段落显示为“锟斤拷”或者一堆方块符号。根因是源文件编码不一致有的GBK有的UTF-8而你合并时没有统一编码。解决办法有三个层面。最简单是统一源文件的编码先把所有文件用批量转换工具转成UTF-8再合并中等方案是使用Python的chardet自动检测每个文件编码动态解码后统一写入最高级方案是在代码里对编码转换失败做兜底用errorsignore跳过无法识别的字符。我这里给出一个实用兜底写法with open(f, r, encodingenc, errorsignore) as infile: out.write(infile.read())注意errorsignore会静默丢弃坏字节适合你已经确认那些乱码字符不重要、或者本身是特殊非文本内容时使用。不要在任何需要严谨保留原始数据的场景盲目开这个开关。5.2 合并顺序错乱字典序和数字序的碰撞前面提过数字文件名排序问题。这里我再强调一次如果文件是“第1章.txt、第2章.txt、第10章.txt”这种命名一定要用自然排序。解决方案就是我在Python部分给的natural_key函数从左往右按“字母段、数字段”交替比较保证数字按数值大小而不是字符顺序排列。Windows的CMD方案和Linux的cat通配符方案都受字典序限制只能靠脚本解决。5.3 命令行提示文件过长或参数太多Windows的CMD有一个命令行长度限制单条命令最多8191个字符。当你用type *.txt时如果文件数量极多或路径超长CMD会直接报错。解决办法是用脚本遍历来处理或者在Python里用glob通配符完全绕开命令行长度限制。这个问题不容易预防是到了就能撞上的硬限制。5.4 合并后文件缺头少尾文件间缺失换行前面提到的内容粘连问题本质是上一个文件末尾没有换行或者下一个文件开头没有换行。两个文件就在同一个位置“衔接”了肉眼看起来就是两段话连在一起。解决思路是在写文件之间强制插入换行符或者读取时检测当前文件末尾是否存在换行不存在就补一个。我的建议是直接无条件检查并在缺失时补不用关心下一个文件开头是什么样的。5.5 大文件合并时脚本卡死或内存不足如果Python脚本直接崩溃先检查是不是一次性读了整个文件。解决办法是我在3.2节给的分块读取方案。分块之后内存占用基本恒定1MB一块读多少写多少。另外如果输出文件越来越大要注意写入缓冲区设置必要时可以用open(..., buffering1024*1024)指定更大的缓冲区减少磁盘IO次数。实测在机械硬盘上调大缓冲区能明显提升合并速度。6. 场景实战文件合并模板与后续扩展6.1 两个现成的万能模板直接抄作业我把我日常使用的两个模板贴出来一个适用于Windows用户且不想装Python另一个是Python全功能版。命令行模板echo off chcp 65001 type *.txt merged_utf8.txt说明一下chcp 65001是把CMD的代码页切到UTF-8避免某些情况下控制台输出和重定向的默认编码不一致导致合并结果乱码。这个模板适合源文件全部是UTF-8且不需要自然排序的场景。Python全功能模板就是3.4节的完整版本包含自然排序、编码检测、自动补换行以及可选的进度打印。这个我强烈建议保存为merge_txt.py以后在外面用终端一行调用python merge_txt.py6.2 合并之后还能干什么行号标记、去重与增量合并合并完的txt文件往往还需要二次加工。比如给每行加行号我在2.2节提过Linux下的cat -nPython里也有等价写法。比如过滤重复的行用set或者dict.fromkeys去重保证合并后内容不冗余。再比如增量合并每天新生成的日志文件只追加到已有合并文件里保持脚本幂等性。到这里基本能覆盖大家绝大多数合并txt文件的需求。我在实际项目里踩过最多的还是编码问题因为不同来源的文件真的什么编码都有。后来我养成一个习惯拿到别人给的任何一批txt先跑一次编码检测脚本看一眼各个文件的编码分布再决定怎么合并。如果你也经常面对“一堆乱七八糟来源的txt”真心建议把这个习惯刻进DNA里。最后再分享一个小技巧。合并完不要急着删源文件先检查合并后文件的大小是否符合预期。假设源文件总大小约50MB合并结果只有几MB那多半是读取过程中漏了文件或者编码转换把内容吃掉了。先用命令行查一下文件数量、对比总字节数确认无误再清理能少走很多弯路。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑