使用 Python 遍历文件夹

要解决这个问题,使用 Python 的标准库可以很好地完成。我们要做的是遍历目录树,找到所有的 text 文件,读取内容,处理空行和空格,并将处理后的内容合并到一个新的文件中。

整体思路:

  1. 遍历子目录:我们可以使用 os 模块来遍历目录中的所有文件。os.walk 是一个常用的方法,它可以递归遍历指定目录中的所有文件和子目录。
  2. 读取文件并处理内容:对于每个 .txt 文件,我们读取文件内容,删除空行和空格。可以使用字符串的 strip() 方法去除行首和行尾的空格,并且过滤掉空行。
  3. 合并文件内容:处理完每个文件的内容后,我们将所有内容合并成一个字符串,准备写入到新的文件中。
  4. 写入新的文件:最后,将合并后的内容写入到一个新的文本文件中。

Python 实现步骤

我们可以从文件遍历开始。先确保能够遍历子目录,然后一步步地实现每个细节。

步骤 1:遍历子目录

在 Python 中,os.walk 是一个非常强大的函数,可以递归遍历指定目录下的所有子目录和文件。它返回的是一个生成器,生成的是三元组 (dirpath, dirnames, filenames),即当前路径、当前路径下的目录列表和当前路径下的文件列表。

import osdef list_text_files(root_dir):text_files = []for dirpath, dirnames, filenames in os.walk(root_dir):for file in filenames:if file.endswith(".txt"):text_files.append(os.path.join(dirpath, file))return text_files

在这个函数中,我们遍历了 root_dir 目录下的所有子目录及其文件,并将所有 .txt 文件的路径添加到 text_files 列表中。

步骤 2:读取文件并删除空行和空格

为了从文件中删除空行和空格,我们可以使用 strip() 函数来处理每一行,并且过滤掉空行。示例代码如下:

def clean_text_file(file_path):cleaned_lines = []with open(file_path, 'r', encoding='utf-8') as file:for line in file:cleaned_line = line.strip()  # 删除行首尾的空格if cleaned_line:  # 过滤空行cleaned_lines.append(cleaned_line)return cleaned_lines

在这个函数中,我们打开每个 .txt 文件,逐行读取它的内容。通过 strip() 函数,我们删除了每一行的首尾空格。之后,我们过滤掉空行,只保留有内容的行。

步骤 3:合并所有文件的内容

接下来,我们要把所有清理过的文件内容合并在一起。我们可以通过调用 clean_text_file() 函数获取每个文件的内容,并将这些内容追加到一个大列表中。

def merge_cleaned_files(file_paths):all_cleaned_lines = []for file_path in file_paths:cleaned_lines = clean_text_file(file_path)all_cleaned_lines.extend(cleaned_lines)return all_cleaned_lines

在这个函数中,我们遍历所有的文件路径,使用 clean_text_file() 函数清理每个文件的内容,然后将所有清理后的内容合并到 all_cleaned_lines 列表中。

步骤 4:写入新文件

合并后的所有内容需要写入到一个新的 .txt 文件中。我们可以使用 Python 的 open() 函数来完成这个操作。

def write_to_new_file(new_file_path, cleaned_content):with open(new_file_path, 'w', encoding='utf-8') as new_file:for line in cleaned_content:new_file.write(line + '\n')

在这个函数中,我们打开一个新的文件,并将所有清理后的内容逐行写入文件。为了确保每行内容之间有换行符,我们在每一行后面添加了 \n

完整的实现代码

将上述步骤整合在一起,形成完整的 Python 脚本:

import os# Step 1: List all text files in the directory and its subdirectories
def list_text_files(root_dir):text_files = []for dirpath, dirnames, filenames in os.walk(root_dir):for file in filenames:if file.endswith(".txt"):text_files.append(os.path.join(dirpath, file))return text_files# Step 2: Clean text files by removing blank lines and extra spaces
def clean_text_file(file_path):cleaned_lines = []with open(file_path, 'r', encoding='utf-8') as file:for line in file:cleaned_line = line.strip()  # Remove leading and trailing spacesif cleaned_line:  # Ignore blank linescleaned_lines.append(cleaned_line)return cleaned_lines# Step 3: Merge the cleaned content of all files
def merge_cleaned_files(file_paths):all_cleaned_lines = []for file_path in file_paths:cleaned_lines = clean_text_file(file_path)all_cleaned_lines.extend(cleaned_lines)return all_cleaned_lines# Step 4: Write merged content to a new file
def write_to_new_file(new_file_path, cleaned_content):with open(new_file_path, 'w', encoding='utf-8') as new_file:for line in cleaned_content:new_file.write(line + '\n')# Main function to orchestrate the process
def process_text_files(root_dir, new_file_path):# Step 1: Get all text filestext_files = list_text_files(root_dir)# Step 2 and 3: Clean and merge the contentcleaned_content = merge_cleaned_files(text_files)# Step 4: Write to the new filewrite_to_new_file(new_file_path, cleaned_content)# Example usage:
root_directory = '/path/to/your/directory'
output_file = '/path/to/your/output_file.txt'
process_text_files(root_directory, output_file)

代码的解释

  1. list_text_files 函数:它遍历了目录及其子目录,找到了所有以 .txt 结尾的文件。文件的完整路径被保存在 text_files 列表中,便于后续处理。
  2. clean_text_file 函数:它读取给定文件的每一行,使用 strip() 函数清除行首尾的空格。之后,通过判断 cleaned_line 是否为空来过滤掉空行。如果这行有内容,就将它添加到 cleaned_lines 列表中。
  3. merge_cleaned_files 函数:它合并所有文件的内容。我们遍历每个文件路径,调用 clean_text_file 来获取每个文件的清理内容,然后将这些内容合并到一个大列表中。
  4. write_to_new_file 函数:它将合并后的内容写入到一个新的文件中。逐行写入时,通过 line + '\n' 来确保每一行都带有换行符。

示例说明

假设有如下目录结构:

/example_directory/subdir1file1.txtfile2.txt/subdir2file3.txtfile4.txt

每个 .txt 文件可能包含以下内容:

  • file1.txt

    Hello WorldThis is a test.
  • file2.txt

    Python is fun!
  • file3.txt

    
    The quick brown fox.

处理后,每个文件的内容会删除空行和空格,结果将合并为:

Hello World
This is a test.
Python is fun!
The quick brown fox.

最后,所有处理后的内容会被写入到一个新的文件中。新的文件将包含所有 .txt 文件中非空行的内容,且所有行首尾的空格已经被去掉。

关于性能优化

如果处理的文件非常多或非常大,可能会涉及一些性能优化的需求。比如,逐步处理文件而不是一次性读取所有文件的内容,可以避免过大的内存占用。以下是一些可能的优化方向:

  1. 逐步写入输出文件:可以在处理每个文件时,直接将清理后的内容写入新的文件,而不是等所有文件都处理完再写入。这样可以避免在内存中存储过多的数据。
  2. 多线程处理:在 Python 中使用多线程或多进程模块(如 threadingmultiprocessing)来同时处理多个文件,可以提升处理速度。
  3. 生成器:使用生成器处理文件可以更高效地利用内存,特别是在文件内容非常大的情况下。

总结

通过使用 Python 的标准库 os 和字符串处理功能,我们可以轻松实现读取子目录下所有

.txt 文件,并删除空行和空格,将处理后的内容合并到一个新的文件中。这个方法是高效且易扩展的,适用于各种目录结构和文件规模。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1555407.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2.3MyBatis——插件机制

2.3MyBatis——插件机制 1.基本用法2.原理探究2.1加载过程2.2执行过程2.2.1 插件的执行点2.2.2 SQL执行的几个阶段2.2.3 如何梳理出执行流程 插件机制是一款优秀框架不可或缺的组成部分,比如spring、dubbo,还有我们要聊的Mybatis等等。所谓插件&#xff…

vSAN02:容错、存储策略、文件服务、快照与备份、iSCSI

目录 vSAN容错条带化存储策略1. 创建新策略2. 应用存储策略 vSAN文件服务文件服务快照与备份 vSAN iSCSI目标服务 vSAN容错 FTT:Fault to Tolerance 允许故障数 故障域:每一台vSAN主机是一个故障域 - 假设3台超融合(3计算1存储)&…

力扣 简单 110.平衡二叉树

文章目录 题目介绍解法 题目介绍 解法 平衡二叉树:任意节点的左子树和右子树的高度之差的绝对值不超过 1 //利用递归方法自顶向下判断以每个节点为根节点的左右子树的最大深度是否大于1 class Solution {public boolean isBalanced(TreeNode root) {if(root null){return tr…

基于Java的GeoTools对Shapefile文件属性信息深度解析

目录 前言 一、Shapefile的属性列表信息 1、属性表格信息 2、属性表格包含的要素 二、GeoTools对属性表格的解析 1、常规解析方法 2、基于dbf文件的属性信息读取 三、总结 前言 ESRI Shapefile(shp),或简称shapefile,是美…

【Spring Boot React】Spring Boot和React教程 完整版

【Spring Boot & React】Spring Boot和React教程 在B站找到一个不错的SpringBoot和React的学习视频,作者是amigoscode 【Spring Boot & React】Spring Boot和React教程 2023年更新版【Spring Boot React】价值79.9美元,全栈开发,搭…

如何使用CMD命令启动应用程序(二)

说明:去年1024发布了一篇博客,介绍如何使用CMD命令启动应用程序,但实际情况,有些程序可能无法用配置环境变量的方式来启动,本文针对两种情况下的程序,如何使用CMD命令来启动,算是对上一篇博客的…

Qt操作主/从视图及XML——实例:汽车管理系统

目录 1. 主界面布局2.连接数据库3.主/从视图应用 1. 主界面布局 先创建一个QMainwindow&#xff0c;不带设计界面 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QGroupBox> #include <QTableView> #include <QListWidg…

鸿蒙harmonyos next flutter混合开发之开发plugin(获取操作系统版本号)

创建Plugin为my_plugin flutter create --org com.example --templateplugin --platformsandroid,ios,ohos my_plugin 创建Application为my_application flutter create --org com.example my_application flutter_application引用flutter_plugin&#xff0c;在pubspec.yam…

如何解决 MySQL ERROR 1040 (08004): Too many connections ?

MySQL 是最流行的开源关系数据库管理系统之一&#xff0c;它也是开发人员中非常常用的数据库。即便它高度健壮和可伸缩性极强&#xff0c;像任何软件一样&#xff0c;它也可能出现错误。我们会经常遇到一个错误&#xff0c;特别是在高流量系统中&#xff0c;error 1040 (08004)…

51c视觉~CV~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/11668984 一、 CV确定对象的方向 介绍如何使用OpenCV确定对象的方向(即旋转角度&#xff0c;以度为单位)。 先决条件 安装Python3.7或者更高版本。可以参考下文链接&#xff1a; https://automaticaddison.com/how-to-s…

阳台山足球营地的停车位探寻

阳台山足球营地的环境是真好哈。停车场名称&#xff1a;阳台山森林公园配套停车场。应该很多爬山的人车子也停在这里。而且我没想到的&#xff0c;阳台山的山泉水还有不少居民每天提着空桶去山上装。看来环境是真的很好哈 停车场有地面和地下停车场&#xff0c;停车位个数查不…

java 数据存储方式

1. 变量存储 这是最基本的数据存储方式&#xff0c;通过声明变量来存储数据。变量可以是基本数据类型&#xff08;如int、float、char等&#xff09;&#xff0c;也可以是引用数据类型&#xff08;如对象、数组等&#xff09;。变量存储的数据通常存储在内存中&#xff0c;随着…

【记录】Excel|Excel 打印成 PDF 页数太多怎么办

【记录】Excel&#xff5c;解决 Excel 打印成 PDF 页数过多的问题 文章目录 【记录】Excel&#xff5c;解决 Excel 打印成 PDF 页数过多的问题方法一&#xff1a;调整页边距WPS OfficeMicrosoft Excel 方法二&#xff1a;优化页面布局调整列宽和行高使用“页面布局”视图合并单…

python全栈开发是什么?

全栈指掌握多种技能&#xff0c;并能利用多种技能独立完成产品。通俗的说就是与这项技能有关的都会&#xff0c;都能独立完成。 python&#xff0c;因为目前很火&#xff0c;能开发的项目很多。例如&#xff1a;web前端后端&#xff0c;自动化运维&#xff0c;软件、小型游戏开…

八大排序--01冒泡排序

假设有一组数据 arr[]{2&#xff0c;0&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;7} 方法&#xff1a;开辟两个指针&#xff0c;指向如图&#xff0c;前后两两进行比较&#xff0c;大数据向后冒泡传递&#xff0c;小数据换到前面。 一次冒泡后&#xff0c;数组中最大…

【网络篇】计算机网络——应用层详述(笔记)

目录 一、应用层协议原理 1. 进入应用层 2. 网络应用程序体系结构 &#xff08;1&#xff09;客户-服务器体系结构&#xff08;client-server architecture&#xff09; &#xff08;2&#xff09; P2P 体系结构&#xff08;P2P architecture&#xff09; 3. 进程间通讯 …

【GC日志和OOM日志分析】JVM GC日志和OOM Dump文件分析

1 缘起 充电、充电、充电。 增加一些必备的知识&#xff0c;帮助后续使用。 2 配置JVM参数 为分析GC日志以及OOM相关信息&#xff0c;配置JVM参数&#xff0c;分为三个部分&#xff1a; &#xff08;1&#xff09;堆内存&#xff0c;包括年轻代、最大堆内存&#xff1b; &a…

PELT算法

PELT算法的范畴 PELT算法&#xff08;Pruned Exact Linear Time&#xff09;属于时间序列分析和变点检测&#xff08;Change Point Detection&#xff09;范畴的算法。 从更广泛的角度来看&#xff0c;PELT算法还可以归类为以下几类算法的子集&#xff1a; 1. 时间序列分析&…

初识Linux · 文件(1)

目录 前言&#xff1a; 回顾语言层面的文件 理解文件的预备知识 文件和磁盘 使用和认识系统调用函数 前言&#xff1a; 本文以及下篇文章&#xff0c;揭露的都是Linux中文件的奥秘&#xff0c;对于文件来说&#xff0c;初学Linux第一节课接触的就是文件&#xff0c;对于C…

COMP 9517 Computer Vision week3

目录 特征表示图像特征概念(image feature)图像特征应该具备的属性 图像特征种类颜色特征颜色直方图(Color Histogram)颜色矩(Colour moments) 纹理特征(texture features)Haralick特征局部二值模式(Local Binary Patterns, LBP)尺度不变特征变换SIFT(Scale-invariant feature …